如果(1,true)是什么意思

what does - if(1, true) - mean?

本文关键字:是什么 意思 true 如果      更新时间:2023-10-16

我遇到了这个代码:

if (1, true) {/*...*/}

它到底是什么意思?当评估结果为真时:

void foo(){}
...
if(1, foo()) {/*...*/}

这不会编译:

void foo(){}
...
if (1 == foo()) {/*...*/}

显然是因为编译器期望foo((返回一些整数值。我以为逗号可以翻译成某种运算符。if子句中的逗号在内部翻译成什么了吗?

逗号运算符只计算左操作数,然后计算右操作数。所以像这样的表达

(1, true)

首先计算1,然后计算true,得到表达式值true

在这种特殊情况下,逗号运算符的使用似乎毫无意义。

逗号运算符返回右操作数的结果,并丢弃左操作数的结论。计算两个操作数,先向左,然后向右。

这是逗号运算符。它计算1,然后计算true,然后检查true是否为真,因此它执行if.

正如其他人所解释的,这是逗号(或顺序求值(运算符。

然而,第二个代码片段也不起作用,请参阅gcc 4.3.4的输出。逗号运算符按从左到右的顺序执行所有操作数,将每个操作数视为一个子表达式,并返回链中最后一个表达式的值。由于foo()返回void,因此表达式不正确。如果你的编译器接受了它,那就违反了语言标准。

逗号运算符。评估从左到右。结果是最右边表达式的结果。