[英]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.