未定義行為與未指定行為的差異
tags: C++ Concept
未定義行為(Undefined behavior)
與 未指定行為(Unspecified behavior)
的差異未定義行為(Undefined behavior)
可能發生的事情
- 來自語言標準定義的A行為
- 來自語言標準定義的B行為
- 編譯器作者的行為
編譯器可以根據
語言標準
所提供的行為,選擇要執行哪個行為不會炸且保證每次都一樣,但是有可能換一個編譯器得到不一樣的結果
未指定行為(Unspecified behavior
可能發生的事情
- 編譯器作者的行為
- 出錯炸了
未定義行為則是完全看你運氣了,他就是存在那個會炸掉的機率,而且還很大。
但如果你的程式寫的足夠多,或執行的足夠久,炸的機率接近100%。
總結
總結來說如果你在不移植的情況下未指定行為是安全的
未定義行為則是絕對要避免的
沒有留言:
張貼留言