我遇到了这段代码:
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.
在这种特殊情况下,使用逗号运算符似乎毫无意义.