[英]What is the meaning of expression “+ + a”?
當+ +
之間有空格時,表達式“ + + a
”的含義是什么。 這個表達式是如何評估的?
int main()
{
int a = 3;
printf("%d %d", + +a, a);
}
以及如何評估a+++a
? 它是未定義的還是未指定的或實現定義的?
這是一個無操作 - 兩次因為+ a
是無操作而且重復。
a+++a
被明確地解析為a++ + a
,但在執行時會導致未定義的行為。
注意,如果代碼設置為a = -3;
,打印的值仍然是-3
,兩次。
當++
運算符中間有空格時,您只需應用一次加運算符兩次。
關於表達式a+++a
,C規范說當存在這樣的歧義時,盡可能地咀嚼(“貪婪的詞法分子”或“最大的笨蛋”規則)。 所以a+++a
被評估為a++ + a
根據該規則,表達式如: z = y+++++x;
將被解析為z = y++ ++ +x;
,這是無效的(后增量的結果本身不是可遞增的)。
+a
恰好與-a
相反。
。換句話說,在-a
將有符號相反a
, +a
只是重新確認現有正/負號a
。
然后又有一個外部正面,仍然導致3。
相反的版本是:
printf("%d %d",- -a,a);
哪個是“負面否定3”......這又是+3
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.