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

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

請(qǐng)教一個(gè)比較弱的問題……

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

我的理解是,x = x+(x++)+x = 31才對(duì)。請(qǐng)問難道應(yīng)該理解成x = (x++)+(x++)+x 還是 x = x+(x++)+(x++)嗎?

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

謝謝了先!

回答
編輯回答
茍活

x += x+++x;
根據(jù)c語言的貪婪匹配原則,會(huì)被認(rèn)為是x+=(x++)+x;x在+=時(shí)為11了,x+++x是10+11,最后應(yīng)該是11+10+11,不過這是我自己猜的,這種在一個(gè)表達(dá)式中多次修改變量值的行為是ub,會(huì)因?yàn)榫幾g器不同可以有不同結(jié)果。

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

x = x + (x++) + x = 10+11+11=32
在最后一個(gè)x,因?yàn)橹耙呀?jīng)執(zhí)行過x++了,所以此時(shí)的x已經(jīng)改變了。

2017年9月13日 04:02
編輯回答
風(fēng)畔

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

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

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

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

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

2017年7月23日 11:06