簡體   English   中英

增量和加法運算符優先級,cpp

[英]increment and addition operators precedence, cpp

我有兩個問題。
考慮以下代碼:

int x=1,y=2;
int z =(x++)+(++y);
int w = (++x)++;
cout << z << "\t" << w << "\t" << x;

現在,這給了我4、3和4,我猜w=3是因為這個int w = (++x)++是未定義的行為,對我來說很好。 我不明白的是:我試圖寫這行int w = (++x)++; 像這樣int w = ++x++; 並得到error: lvalue required as increment operand ,但是,我在這里看到postfix的優先級高於前綴,那么為什么postfix的增量未完成,返回變量,然后使用前綴對其進行增量? (當我使用方括號時就完成了)

現在回到這一行: int z =(x++)+(++y) 我試圖像int z =x+++++y一樣寫它,但沒有用-同樣的錯誤。 然后我嘗試了int z =x+++(++y) ,這很好,所以我認為是這樣的:

  1. X ++
  2. ++ÿ
  3. 加成

但是如果我是對的,為什么需要括號呢? 這是應該優先的方式

那么為什么后綴增量沒有完成,返回變量

后綴版本不返回引用,而是返回一個值-前綴增量只能與引用一起使用。

通過添加括號,您已經更改了評估順序。

這不是優先級的問題,而是編譯器解析代碼的方式。 要正確編譯,您無需使用方括號。 可以在空格處正常工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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