簡體   English   中英

為什么 return 0 或 break 不能與逗號運算符一起使用?

[英]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

那是因為returnbreak是語句,而不是表達式。 因此,您不能以任何方式在另一個表達式中使用它。 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM