什么 - if(1,true) - 是什么意思?

时间:2011-07-01 20:28:36

标签: c++ if-statement

我遇到了这段代码:

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

它究竟意味着什么? 虽然评估结果为真:

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

这不会编译:

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

显然是因为编译器期望foo()返回一些整数值。我以为逗号会转换为某个运算符。 if子句中的逗号是否转换为内部内容?

5 个答案:

答案 0 :(得分:11)

逗号运算符只是计算其左操作数,然后是右操作数。所以像

这样的表达式
(1, true)

首先评估1,然后评估true,结果表达式值为true

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

答案 1 :(得分:7)

逗号运算符返回右操作数的结果,并丢弃左操作数的结果。 两个操作数都被评估,先左,然后右。

答案 2 :(得分:1)

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

答案 3 :(得分:1)

正如其他人所解释的那样,这是逗号(或顺序评估)运算符。

但是,第二个代码段也不起作用,请参阅gcc 4.3.4's output。逗号运算符以从左到右的顺序执行其所有操作数,将每个操作数作为单个子表达式处理,并返回链中最后一个表达式的值。当foo()返回void时,表达式不正确。如果编译器接受它,则违反了语言标准。

答案 4 :(得分:0)

Comma operator。从左到右进行评估。结果是最右边表达的结果。