c – 在std :: common_type的实现中发现这种情况有什么意义?

c – 在std :: common_type的实现中发现这种情况有什么意义?,第1张

概述以下是 std::common_type的专业之一. template <class T, class U>struct common_type<T, U> { typedef decltype(true ? declval<T>() : declval<U>()) type;}; 我的观点是条件陈述是不必要的.如果它检查为true,表达式是否总是会解析为declval< T>()?如 @H_404_1@ 以下是 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 all T... 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的实现中发现这种情况有什么意义?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1219838.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存