變數只能在定義時被初始化

2021-07-13 10:53:19 字數 2309 閱讀 3962

在這種情況下,計算機會將一些閒置的記憶體,它將把價值居住在該記憶體位置的法庭,它將列印值。但它會列印什麼價值?答案是「誰知道!「每次執行該程式時,答案都會改變。當作者冉本程式用visual studio 2013編譯,std::cout印製價值7177728一次,和5277592下。

如果你想自己執行這個程式的話,你就可以在這項計畫中:

確保你使用發布版本的配置(見第0.6a,生成配置資訊如何做)。否則,上述程式可以列印任何價值,你的編譯器初始化記憶體(visual studio使用- 858993460)。

使用未初始化的變數是乙個新手程式設計師,最常見的錯誤,不幸的是,它也可以是乙個最具挑戰性的除錯(因為程式可能執行好如果未初始化的值發生到一點記憶中,有乙個合理的值,如0)。

幸運的是,大多數現代編譯器都會在編譯時發出警告,如果它們能夠檢測到不被初始化的變數。例如,編制上述程式對視覺工作室2005表示產生了以下警告:

c:vc2005projectstesttesttest。cpp(11):警告前未初始化的區域性變數使用

乙個好的經驗法則是初始化變數。這確保您的變數將始終具有一致的值,使除錯如果在其他地方出錯的話更容易除錯。

規則:初始化變數。

int x = 5;123

4567

8int y; // define y as an integer variable

y = 4; // 4 evaluates to 4, which is then assigned to y

y = 2 + 5; // 2 + 5 evaluates to 7, which is then assigned to y

int x; // define x as an integer variable

x = y; // y evaluates to 7 (from before), which is then assigned to x.

x = x; // x evaluates to 7, which is then assigned to x (useless!)

x = x + 1; // x + 1 evaluates to 8, which is then assigned to x.

x = x - 2;std::cout << x << std::endl; // #1 int y = x;std::cout << y << std::endl; // #2 // x + y is an r-value in this context, so evaluate their valuesstd::cout << x + y << std::endl; // #3 std::cout << x << std::endl; // #4 int z;std::cout << z << std::endl; // #5

變數只能在定義時被初始化。

雖然這兩個概念在本質上是相似的,並且通常可以用來實現類似的目的,我們將在本課的一些型別需要乙個初始化變數值的情況,或不允許轉讓。因為這些原因,現在是有用的區別了。

未初始化變數

不像一些程式語言,c / c++不初始化變數的給定值(如零)自動(出於效能原因)。因此,當乙個變數被編譯器分配給乙個記憶體位置時,該變數的預設值是,無論發生了什麼,都會發生在記憶體位置!乙個變數沒有被賦值為乙個未初始化的變數。

注意:一些編譯器,如視覺化工作室,將在使用除錯構建配置時初始化記憶體的內容。使用發布版本配置時不會發生這種情況。

未初始化的變數可能會導致一些有趣的(和有趣的,我們的意思是意想不到的)結果。考慮以下短程式:

123

4567

8int y; // define y as an integer variable

y = 4; // 4 evaluates to 4, which is then assigned to y

y = 2 + 5; // 2 + 5 evaluates to 7, which is then assigned to y

int x; // define x as an integer variable

x = y; // y evaluates to 7 (from before), which is then assigned to x.

x = x; // x evaluates to 7, which is then assigned to x (useless!)

x = x + 1; // x + 1 evaluates to 8, which is then assigned to x.

變數(定義 初始化) 臨時變數

宣告與定義 變數的宣告 如 extern int a 宣告外部變數 告訴編譯器變數名字與型別 變數的定義 為變數分配儲存空間,此時也可以給定初始值 函式的宣告 告訴編譯器有這麼乙個函式 函式的定義 實現函式,簡言之就是帶有 與結構體一樣,類只是一種複雜資料型別的宣告,不占用記憶體空間。而物件是類這種...

why靜態變數只能被初始化一次?

函式1 int fun 當fun函式被呼叫時,i會一直 函式2int fun 當函式被呼叫時只會return 1 因為 1 這兩個變數i同名但是不同意義 靜態變數 作用在全域性,生命週期和程式一樣,i在記憶體開闢的空間不會隨著函式呼叫而被銷毀 每次呼叫都會找到之前的i,所以一直 變數i 作用在區域性...

static成員變數定義初始化

static成員變數不僅可以通過靜態成員函式來改變其值,還可以通過建構函式改變其值。其中靜態的建構函式僅僅能夠改變靜態的成員變數,一般建構函式可以改變靜態成員變數或者其他成員變數。以下是建構函式可以改變靜態成員變數的值的 class atest static a int atest a 0 這裡不能...