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

bad*_*ash 2 c++ if-statement

我遇到了这段代码:

if (1, true) {/*...*/}
Run Code Online (Sandbox Code Playgroud)

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

void foo(){}
...
if(1, foo()) {/*...*/}
Run Code Online (Sandbox Code Playgroud)

这不编译:

void foo(){}
...
if (1 == foo()) {/*...*/}
Run Code Online (Sandbox Code Playgroud)

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

Dav*_*ble 11

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

(1, true)
Run Code Online (Sandbox Code Playgroud)

计算第1一个,然后是true,得到表达式值true.

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


Mic*_*bus 7

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