带有 void 操作数的 C++ 条件运算符

标签 c++ void conditional-operator

我试图理解以下摘自 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/

相关文章:

java - println 不打印期望值

c++ - C++ 标准规定 int、long 类型的大小是多少?

c++ - 你能在Visual C++中找到一个值的实际数量吗?

unit-testing - 如何在F#中保持方法返回类型 'void'?

java - void 方法不能返回 void 方法的值?

python - 是否可以使用条件表达式进行多项赋值?

c++ - 如何在 SQLite 中列出临时表/ View ?

c++ - "thread-safe"函数并行化框架是否依赖?

c - 如何将 void 指针中的信息放入 char 数组?

c++ - 条件运算符总是可以被 if/else 替换吗?