我试图理解以下摘自 C++ 标准(ISO/IEC 14882:2003,较新的版本基本上相同)的摘录:
5.16 Conditional operator
2 If either the second or the third operand has type (possibly cv-qualified) void, then the lvalue-to-rvalue (4.1), array-to-pointer (4.2), and function-to-pointer (4.3) standard conversions are performed on the second and third operands, ...
我倾向于认为,在这种情况下,当操作数是函数调用时,操作数的类型被认为是(尽管不是)函数返回类型。如果是这样,那么就会产生一个 void 类型的例子。
我还认为,在这种情况下,throw 表达式也可以推测为 void 类型,与 throw 操作数的类型无关。那将是另一个例子。
我的两个假设是否正确?还有其他情况吗?
非常感谢
最佳答案
关于throw,是的,没有结果,所以类型为void,与throw操作数的类型无关。我不确定它如何相关,所以这个问题看起来很奇怪。
关于函数,我不知道为什么说操作数是函数调用,操作数的类型不是函数返回类型。还会是什么呢?这是操作数是函数(而不是函数调用)的地方,函数到指针的转换将启动。
条件运算符的结果类型取决于其操作数的类型。 我认为围绕其中一个操作数为空的特殊语言只是条件运算符的结果随后为空,因此关于可能执行不同类型操作数转换的规则不相关。
关于带有 void 操作数的 C++ 条件运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45781301/