在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/C++/ 弱問C++里怎么理解x+++x

弱問C++里怎么理解x+++x

請教一個比較弱的問題……

    int x = 10;
    x += (x++)+x;
    cout << x << endl;
    // 結果為32

我的理解是,x = x+(x++)+x = 31才對。請問難道應該理解成x = (x++)+(x++)+x 還是 x = x+(x++)+(x++)嗎?

對于變量 y+=z = y+z,難道加法運算要最后最后才執(zhí)行嗎?

謝謝了先!

回答
編輯回答
茍活

x += x+++x;
根據(jù)c語言的貪婪匹配原則,會被認為是x+=(x++)+x;x在+=時為11了,x+++x是10+11,最后應該是11+10+11,不過這是我自己猜的,這種在一個表達式中多次修改變量值的行為是ub,會因為編譯器不同可以有不同結果。

2018年5月9日 02:11
編輯回答
懷中人

x = x + (x++) + x = 10+11+11=32
在最后一個x,因為之前已經(jīng)執(zhí)行過x++了,所以此時的x已經(jīng)改變了。

2017年9月13日 04:02
編輯回答
風畔

后置運算符++并不是等到整條語句執(zhí)行結束才完成對變量的+1操作,是變量State與運算符++這個表達式執(zhí)行結束后就完成,所以state += (state++) + state,相當于11 += 10 + 11。最終等于32。

這個問題,其實你反匯編一下就明白了。高級語言隱藏了很多實現(xiàn)細節(jié),看看匯編能給自己更加清晰的認識。說白了就是編譯器對不同grammar的處理細節(jié)隱藏的太深,官方其實有grammar以及相關的spec,但是有些抽象,還不如反匯編方便。

為了加深理解可以,但是應該避免這樣的代碼,可讀性太差。

2017年8月21日 07:04
編輯回答
單眼皮

我的理解:x= x+(x++)+x =((x+(x++))+x)=10+11+11=32;括號運算優(yōu)秀級最高,第一個x是10,后面x已經(jīng)是11;

2017年7月23日 11:06