我可以编写代码if(1) x++, y++;
而不是if(1) {x++; y++;}
,但是在某些情况下它不起作用(请参见下文)。如果您告诉我这件事会很好。
int x = 5, y = 10;
if (x == 5) x++, y++; // It works
if (x == 5) x++, return 0; // It shows an error
for
循环也是如此:
for (int i = 0; i < 1; i++) y++, y += 5; // It works
for (int i = 0; i < 1; i++) y++, break; // Does not work
答案 0 :(得分:60)
这是因为return
和break
是语句,而不是表达式。因此,您不能以任何方式在另一个表达式中使用它。 if
和其他类似的语句。
但是,您可以做的是重写表达式(对于return
),以使它不嵌套在表达式中-不建议我这样编写代码:
return x++, 0;
您不能为break
这么做,因为它不接受表达式。
答案 1 :(得分:11)
逗号运算符用于表达式。
return
语句和其他纯语句不是表达式。
答案 2 :(得分:3)
逗号运算符是采用两个值的二进制运算符。这样,它与+
或*
相同。 +
将两个值相加并返回结果,而*
将两个值相乘并返回结果,而逗号运算符只是忽略左边的值而返回右边的值。
2 + 5
的值为7
2 * 5
的值为10
2 , 5
的值为5
,仅是运算符右边的操作数。
因此,您无法写2,break
的原因与您无法写2+break
的原因相同。
因为break是语句,而不是值。
忽略二进制操作数之一的二进制运算符有什么用?逗号运算符会忽略左操作数的值,但仍会对该表达式求值。 该表达的任何副作用仍然可以实现。考虑:
i = 2;
j = 5;
i++, j++;
首先对两个表达式求值。 i++
返回值2
,然后递增i
。 j++
返回值5
,然后递增j
。最后,将逗号运算符应用于这两个值:2,5
,它将忽略2
并返回5
。