6.8 未定義行為(Undefined Behavior, UB)
到這裡,你已經看過幾種「程式可以編譯、但結果完全不能信」的情況:局部變數或局部陣列沒有初始化、陣列索引超出範圍、整數溢位、除數是 0,或是在同一個運算式中多次修改同一個變數。
在 C++ 裡,這類語言標準沒有規定結果的寫法,正式名稱叫做未定義行為(undefined behavior, UB)。一旦程式踩到 UB,結果就不能預測:可能印出垃圾值、可能直接當掉,也可能在你的電腦上看起來正常,送到 OJ 或換個編譯器就錯。
| Level 0 常見情況 | 例子 | 避免方式 |
|---|---|---|
| 局部變數或局部陣列未初始化就使用 | int x; cout << x;、int a[10]; cout << a[0]; |
宣告時給初值,例如 int x = 0;、int a[10] = {}; |