語法書 / AA 競程語法書 上冊 / 第六單元 / 未定義行為(Undefined Behavior, UB)

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] = {};

登入後即可閱讀完整內容

語法書免費開放給所有 AACPOJ 帳號,註冊只要一分鐘。