3 回答

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超6個(gè)贊
這是未定義的行為,您正在修改const變量,因此您不能期望結(jié)果。我們可以通過(guò)轉(zhuǎn)到草案C ++標(biāo)準(zhǔn)部分7.1.6.1
cv-qualifiers第4段來(lái)看到這一點(diǎn):
[...]任何在其生命周期內(nèi)修改const對(duì)象的嘗試(3.8)都會(huì)導(dǎo)致未定義的行為。
甚至提供了一個(gè)例子:
const int* ciq = new const int (3); // initialized as requiredint* iq = const_cast<int*>(ciq); // cast required*iq = 4; // undefined: modifies a const object
在部分中未定義行為的標(biāo)準(zhǔn)定義中1.3.24
,給出以下可能的行為:
[...]允許的未定義行為包括完全忽略不完全結(jié)果的情況,在翻譯或程序執(zhí)行期間以環(huán)境特征(有或沒有發(fā)出診斷消息)的文件化方式行事,終止翻譯或執(zhí)行(發(fā)出診斷消息)。[...]

TA貢獻(xiàn)1830條經(jīng)驗(yàn) 獲得超9個(gè)贊
您的代碼具有未定義的行為,因?yàn)槟谛薷某A繉?duì)象。什么都可能發(fā)生,沒有什么是不可能的。

TA貢獻(xiàn)2011條經(jīng)驗(yàn) 獲得超2個(gè)贊
當(dāng)你對(duì)變量const
進(jìn)行限定時(shí),編譯器可以假定一些事情并生成代碼,這可以正常工作,只要你尊重協(xié)議而不是破壞協(xié)議。當(dāng)你破壞它時(shí),你會(huì)得到未定義的行為。
請(qǐng)注意,const
刪除后,它按預(yù)期工作; 這是一個(gè)實(shí)例。
- 3 回答
- 0 關(guān)注
- 583 瀏覽
添加回答
舉報(bào)