我试图理解C++标准的以下摘录(ISO/IEC 14882:2003,更新版本基本上相同):
5.16条件算子 2如果第二个或第三个操作数的类型(可能是cv限定的)无效,则在第二和第三个操作数上执行lvalue-to-rvalue (4.1)、数组到指针(4.2)和函数到指针(4.3)的标准转换.
我倾向于认为,在这种情况下,当操作数是函数调用时,操作数的类型将被视为(尽管不是)函数返回类型。如果是这样的话,那就会产生一个空类型的例子。
我还设想,抛出表达式也可能在此上下文中具有类型void,这与抛出操作数的类型无关。这将是另一个例子。
我的两个假设正确吗?还有其他的案子吗?
非常感谢
发布于 2017-08-20 13:25:23
关于抛出,是的,没有结果,所以类型是空的,抛出操作数的类型是无关的。我不知道这有什么关系,所以这个问题看起来很奇怪。
关于函数,我不知道为什么您说如果操作数是函数调用,则操作数的类型不是函数返回类型。那还会是什么?在这里,操作数是一个函数(而不是函数调用),函数到指针的转换就会启动。
条件运算符的结果类型取决于其操作数的类型。我认为其中一个操作数无效的特殊语言是,条件运算符的结果是无效的,所以关于可能执行不同类型操作数转换的规则是不相关的。
https://stackoverflow.com/questions/45781301
复制相似问题