2017年3月23日 星期四

未定義行為與未指定行為的差異

未定義行為與未指定行為的差異

tags: C++ Concept
未定義行為(Undefined behavior)未指定行為(Unspecified behavior) 的差異

未定義行為(Undefined behavior)

可能發生的事情
  • 來自語言標準定義的A行為
  • 來自語言標準定義的B行為
  • 編譯器作者的行為
編譯器可以根據語言標準所提供的行為,選擇要執行哪個行為
不會炸且保證每次都一樣,但是有可能換一個編譯器得到不一樣的結果

未指定行為(Unspecified behavior

可能發生的事情
  • 編譯器作者的行為
  • 出錯炸了
未定義行為則是完全看你運氣了,他就是存在那個會炸掉的機率,而且還很大。
但如果你的程式寫的足夠多,或執行的足夠久,炸的機率接近100%。

總結

總結來說如果你在不移植的情況下未指定行為是安全的
未定義行為則是絕對要避免的

沒有留言:

張貼留言