[英]Why does return 0 or break not work with the comma operator?
我可以編寫代碼if(1) x++, y++;
而不是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
那是因為return
和break
是語句,而不是表達式。 因此,您不能以任何方式在另一個表達式中使用它。 if
和其他類似的也是語句。
但是,您可以做的是重寫您的表達式(對於return
),使其不嵌套在表達式中 - 我不建議您編寫這樣的代碼:
return x++, 0;
你不能這樣做, break
它不接受表達式。
逗號運算符用於表達式。
return
語句和其他純語句不是表達式。
逗號運算符是一個二元運算符,它接受兩個值。 這樣,它與+
或*
相同。 +
將兩個值相加並返回結果, *
將兩個值相乘並返回結果,而逗號運算符只是忽略左側的值並返回右側的值。
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
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.