答案是:讓新手更容易學習c++。(天啊!)
這也造成了乙個後果:在c++語言中,初始化是乙個異常複雜的問題。
先說說初始化的定義:初始化就是將賦值與宣告合併在一起,當物件在建立時獲得了乙個特定的值,我們就說這個物件被初始化了。
舉乙個例子,定義並初始化乙個區域性自動int變數(有下面四種寫法):
int i = 0;
int i(0);
int j = ;
int j;
使用花括號的初始化形式是c++ 11新標準引入的(稱為列表初始化),以前c++使用不同的方式來初始化不同的型別,現在可以使用花括號來初始化任何型別了。
預設初始化:如果定義變數時沒有指定初值,則變數被預設初始化。此時變數被賦予「預設值」。預設值到底是什麼由變數的型別決定,同時定義變數的位置也會對此有影響。
值初始化:手動給出初始化值。
string *ps1 = new string;//預設初始化為空string
string *ps = new string();//值初始化為空string
int *pi1 = new int;//預設初始化;*pi的值未定義
int *pi2 = new int();//值初始化0;*pi為0
對於定義了自己的建構函式的類型別來說,要求值初始化是沒有意義的;不管採用什麼形式,物件都會通過預設建構函式來初始化。但對於內建型別,兩種形式的差別就很大了;值初始化的內建型別物件有著良好定義的值,而預設初始化的物件的值則是未定義的。類似的,對於類中那些依賴於編譯器合成的預設建構函式的內建型別成員,如果它們未在類內被初始化,那麼它們的值也是未定義的。
C 為什麼需要成員初始化列表
將建構函式分為兩個階段的執行過程 初始化階段和建構函式函式體階段。既然稱它為成員初始化列表,那麼該階段在初始化階段完成。那麼類成員變數不外乎類型別和非類型別。而對於非類型別而言,此時 無論是在初始化表中還是函式體內完成賦值效果是一致的,即並未初始化。表現的有點不同的是類型別 test1 includ...
bss段為什麼需要初始化?
我們都知道 bss段需要初始化,但是這是為什麼呢?通過瀏覽資料,我們都會發現,bss bin hex 中的,因為全都是 0bss bss段 一堆 0 將來真正執行程式的時候,再根據這兩個資料進行 bss段的初始化就行了。以上這段文字是網上的資料說的。但是,我可不可以讓 bssnandflash 拷貝...
變數為什麼要進行初始化?
記憶體是在作業系統的統一管理下使用的!1 軟體在執行前需向作業系統申請儲存空間,在記憶體空閒足夠時,作業系統將分配一段記憶體空間並將外存中軟體拷貝乙份存入該記憶體空間中,並啟動該軟體的執行 2 在軟體執行期間,該軟體所佔記憶體空間不再分配給其他軟體 3 當軟體執行完畢後,作業系統將 該記憶體空間 注...