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

3
我试图理解C++标准(ISO/IEC 14882:2003,更新版本基本相同)中的以下摘录:
5.16 条件运算符
2 如果第二个或第三个操作数具有类型(可能带有cv限定符)void,则对第二个和第三个操作数执行左值到右值(4.1)、数组到指针(4.2)和函数到指针(4.3)标准转换...
在这种情况下,我倾向于认为,当操作数是函数调用时,操作数的类型被视为(虽然不是)函数返回类型。如果是这样,那么这就产生了一个void类型的示例。
我还想象,在这种情况下,抛出表达式也可以被认为是具有void类型,与抛出操作数的类型无关。那将是另一个例子。
我的两个假设正确吗?还有其他情况吗? 非常感谢
1个回答

0
关于throw,是的,没有结果,因此类型为void,而throw操作数的类型无关紧要。我不确定它如何相关,所以这个问题似乎很奇怪。
关于函数,如果操作数是函数调用,我不知道为什么你说操作数的类型不是函数返回类型。还能是什么呢?只有在操作数是函数(而不是函数调用)时,函数指针转换才会发生。
条件运算符的结果类型取决于其操作数的类型。我认为其中一个操作数为void的特殊语言只是因为条件运算符的结果是void,因此有关可能执行不同类型的操作数的转换的规则不相关。

我之所以这么说,是因为函数的类型由它所取的参数、返回值和任何cv限定符(8.3.5 函数)构成。因此,函数指针的类型会添加“指针”限定符。如果只考虑返回值,则两个指向不同参数但返回相同类型的函数指针将具有相同的类型。这是一场灾难。但在这个运算符的上下文中,似乎只有函数是否返回void才是重要的(我的意思是,在我引用的段落中)。 - user1752563

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接