雖然保險的做法是對每個變數都顯示初始化,但是了解一下預設初始化的規則也是很有必要的。
1.定義於任何函式體之外的變數被初始化為0。
2.定義在函式體內部的區域性變數不會被預設初始化。所以,它的值是未定義的(這裡的「未定義」我的理解:變數所分配記憶體中的二進位制資料,分配時是什麼就是什麼,機器會按照變數的型別來解讀這串二進位制資料)。
3.對於區域性靜態物件(在函式體內加了字首static)如果沒有顯示的初始值,它將進行「值初始化」,內建型別的區域性靜態物件將被初始化為0.
值初始化
c++primer裡是這麼介紹的,書裡採用的是vector的例子
如果定義了乙個vector物件,但是沒有給初始值。則值初始化就開始了——如果vector物件元素是內建型別,比如int,則元素初始值自動設為0.如果元素是某種類型別,比如string,則元素由類預設初始化。
例如:vectorivec(10);//vector中有10個元素,預設初始化為0.
中文版一些定義看著就蛋疼,英文版看著費力。哎
初始化 1 預設初始化 列表初始化
初始化的基本概念 事實 初始化和賦值是兩個完全不同的操作。初始化,是建立變數時賦予其乙個初始值。賦值,是把物件的當前值擦除,用乙個新值代替。列表初始化 p39 作為c 11新標準的一部分,用花括號 來初始化變數得到了全面應用。出於某些原因,這種初始化的方式叫做列表初始化。現在,無論是初始化物件還是某...
值初始化和預設初始化
引用 1 值初始化 顧名思義,就是用數值初始化變數。如果沒有給定乙個初始值,就會根據變數或類物件的型別提供乙個初始值。對於int型別其值初始化後的值為0。對於預設初始化內建型別變數來說 1 定義在函式體之外的變數是全域性變數,一般儲存在全域性區,儲存在全域性區的變數一般會執行值初始化。此時,其初始值...
指標預設初始化
大多數情況下指標變數在棧上分配記憶體,編譯器在分配變數的空間時只是簡單移動棧的指標,這樣在棧上宣告多個變數就來得很快速,進行一次棧指標的移動就可以了,而再讀寫記憶體意味著效率將會損失,並且初始化的內容很快就會被改變 其實變數和指標,編譯器都是平等對待的。vc中,全域性變數初始化為0,全域性指標初始化...