3 回答

TA貢獻(xiàn)1906條經(jīng)驗(yàn) 獲得超3個(gè)贊
當(dāng)我們談?wù)?em>未定義的行為時(shí),重要的是要記住標(biāo)準(zhǔn)為這些情況留下了未定義的行為。它并不禁止實(shí)施更強(qiáng)有力的保證。例如,一些實(shí)現(xiàn)可以保證有符號(hào)整數(shù)溢出包圍,而其他實(shí)現(xiàn)可以保證飽和。
要求編譯器處理涉及未定義行為的常量表達(dá)式將限制實(shí)現(xiàn)可以做出的保證,限制它們產(chǎn)生一些沒有副作用的值(標(biāo)準(zhǔn)稱為不確定值)。這排除了現(xiàn)實(shí)世界中發(fā)現(xiàn)的許多延伸保證。
例如,一些實(shí)現(xiàn)或伴隨標(biāo)準(zhǔn)(即POSIX)可以將積分除以零的行為定義為生成信號(hào)。如果表達(dá)式是在編譯時(shí)計(jì)算的,那么這會(huì)產(chǎn)生副作用。
因此,這些表達(dá)式在編譯時(shí)被拒絕,以避免在執(zhí)行環(huán)境中丟失副作用。

TA貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超2個(gè)贊
還有一點(diǎn)是從常量表達(dá)式中排除未定義的行為:根據(jù)定義,常量表達(dá)式應(yīng)該由編譯器在編譯時(shí)進(jìn)行評(píng)估。允許常量表達(dá)式來(lái)調(diào)用未定義的行為將允許編譯器本身顯示未定義的行為。而且,編譯硬盤驅(qū)動(dòng)器的編譯器因?yàn)?em>編譯了一些惡意代碼而不是你想擁有的。
- 3 回答
- 0 關(guān)注
- 722 瀏覽
添加回答
舉報(bào)