- 未定義:
- 規格で示されず、処理系が好き勝手して良い部分
- 配列の範囲外アクセスとか、符号あり整数のオーバーフローとか、要件を満たさないコードとか
- 処理系は何も示さずに何をしても良い
- その結果はプログラマが予期できるものにならない
- 処理を省略したり、実行時エラーになったり
- 期待通りに動作していても、それはたまたまでしかない
- 未定義動作となるコードは排除されなければならない
- 存在してもバグにしかなり得ないため
- 規格で示されず、処理系が好き勝手して良い部分
- 未規定:
- 規格で示されず、処理系が実装を自由に選択して良い部分
- move後のオブジェクトの状態とか、実引数の評価順序とか、静的変数の初期化順序とか
- 処理系は何も示さなくて良いが、取り得る選択肢は想定されている
- その結果はプログラマが予期できるものになる
- 未定義動作のような”何でもあり”にはならない
- 未規定動作となるコードは特別に気にしなくても良い
- ただし、結果を厳密に定めたい場合には避ける必要がある
- 規格で示されず、処理系が実装を自由に選択して良い部分
- 処理系定義:
- 未規定とほぼ同様だが、文書に示す必要がある部分
C++:未定義と未規定
·
Updated:
Share this post on: