簡體   English   中英

我可以是不同的值還是在c ++中的此代碼示例中始終為0

[英]is i can be different value or always be 0 in this code sample in c++

 #include <iostream>


int j;

 int main(void) {


     int i;
     std::cout<<i<<std::endl;
     std::cout<<j<<std::endl;

     return 0;
}

可以是不同的值還是總是0? 最初適合嗎? 對我來說是意外結果嗎?

您的程序具有未定義的行為,因為它需要對具有不確定值的對象進行從左值到右值的轉換(請參閱C ++ 11標准的第4.1 / 1段)。

簡單來說, i沒有任何明確定義的值,因為您沒有初始化它,並且嘗試讀取其(非)值是未定義的行為。

根據C ++ 11標准的8.5 / 7段:

要默認初始化類型T的對象意味着:

—如果T是一個(可能是cv限定的)類類型(第9條),則調用T的默認構造函數(如果T沒有可訪問的默認構造函數,則初始化格式不正確);

—如果T是數組類型,則每個元素都將默認初始化;

否則,不執行初始化

另外,根據第8.5 / 12段:

如果未為對象指定初始化程序,則該對象將被默認初始化 如果未執行初始化,則具有自動或動態存儲持續時間的對象的值不確定 [...]

i沒有​​預定義(默認)值。 默認情況下,某些環境可能會將其設置為零(Visual Studio調試器曾在多個版本中使用過此功能-我不知道它是否仍會這樣做)。

i的值未定義。 實際上,該值很可能取自分配地址中堆棧存儲器中的任何內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM