std::common_type
的专业之一. template <class T,class U>struct common_type<T,U> { typedef decltype(true ? declval<T>() : declval<U>()) type;};
我的观点是条件陈述是不必要的.如果它检查为true,表达式是否总是会解析为declval< T>()?如果是这样,返回的typedef如何证明定义…
“Determines the common type among all types
T...
,that is the type allT...
can be implicitly converted to.”
有人可以解释条件陈述吗?对true的检查是多余的,并且条件总是会解析为第一个 *** 作数,这是否准确?如果是这样,返回的类型如何满足定义?
解决方法 三元运算符的类型不仅仅是编译器知道必须采用的分支类型.如果存在这样的类型,则它是两个分支共有的类型.如果没有这种类型,则编译失败.三元运算符是唯一具有属性的运算符,它将转换为表达式的公共类型,而不是两个值上的表达式的结果.也就是说,三元运算符只是被滥用来获得通用类型.然而,这种情况并不重要.标准中的相关部分是5.16 [expr.cond]第3段:
Otherwise,if the second and third operand have different types and either has (possibly cv-qualifIEd) class type,or if both are glvalues of the same value @R_502_4602@ and the same type except for cv-qualification,an attempt is made to convert each of those operands to the type of the other.
该段落之后是如何提供常见类型的规则.否则指的是第二或第三表达式是throw-Expression或者第二或第三表达式中的一个或两个具有类型voID的情况.
总结以上是内存溢出为你收集整理的c – 在std :: common_type的实现中发现这种情况有什么意义?全部内容,希望文章能够帮你解决c – 在std :: common_type的实现中发现这种情况有什么意义?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)