使用未初始化的區域性變數

int a;
std::cout << a; // Undefined behavior!

這會導致未定義的行為,因為 a 未初始化。

通常,錯誤地聲稱這是因為該值是不確定的,或之前在該儲存器位置中的任何值。但是,它是在上面的示例中訪問 a 的值的行為,它給出了未定義的行為。實際上,在這種情況下列印垃圾值是一種常見的症狀,但這只是未定義行為的一種可能形式。

雖然在實踐中極不可能(因為它依賴於特定的硬體支援),編譯器在編譯上面的程式碼示例時同樣可以很好地電子程式設計程式設計師。有了這樣的編譯器和硬體支援,對未定義行為的這種響應將顯著增加平均(生活)程式設計師對未定義行為的真實含義的理解 - 這是標準對結果行為沒有約束。

Version >= C++ 14

如果將值用作以下值,則使用 unsigned char 型別的不確定值不會產生未定義的行為:

  • 三元條件運算子的第二個或第三個運算元;
  • 內建逗號運算子的右運算元;
  • 轉換為 unsigned char 的運算元;
  • 如果左運算元也是 unsigned char 型別,則為賦值運算子的右運算元;
  • unsigned char 物件的初始值設定項;

或者如果該值被丟棄。在這種情況下,如果適用,不確定值只會傳播到表示式的結果。

請注意,static 變數始終為零初始化(如果可能):

static int a;
std::cout << a; // Defined behavior, 'a' is 0