2015-05-30 117 views
0

讀取未初始化的變量會導致未定義的行爲,例如,讀取未初始化的變量

#include <iostream> 

int main() 
{ 
    int a; 
    std::cout << a << std::endl; // undefined behavior 
} 

有人可以正式解釋這個事實嗎?

+0

你想要某人_define_未定義的行爲? –

+0

@HoboSapiens不,我想了解爲什麼讀取未初始化的變量是UB。 –

+1

因爲C++規範這麼說......我想象。你問過之前你有沒有嘗試讀過它?或者你只是要求別人爲你閱讀規範? (在後一種情況下......你需要別人來閱讀你的答案嗎?:-)) –

回答

4

這裏是有關部分,我想:

4.1左值到右值轉換

1 - 非功能的glvalue,非陣列類型T可以被轉換爲一個prvalue。如果T是不完整的 類型,則需要此轉換的程序不合格。如果 到的glvalue是指不爲類型T的對象和 不是來自T,或者如果對象派生的類型的對象是 未初始化的對象,即必要這種轉換的程序具有 未定義行爲

一個變量是一個左值,我認爲「右值轉換」是一個變量的值的過程。 (注意 - 我不熟悉C++標準,所以我可能沒有找到適用於這個例子的部分,我所做的只是搜索PDF「未初始化」,然後尋找看起來最相關。)

+0

啊,我不認爲它可能會出現在該部分,謝謝。 –

+0

它不會出現在C++ 14標準中。 –

+0

我沒有C++ 14標準的副本。使用Google可以找到的早期標準草案。 (支付的標準很爛!) –