初始化 1 預設初始化 列表初始化

2021-07-05 16:10:19 字數 1882 閱讀 8768

/********** 

【初始化的基本概念】

事實:初始化和賦值是兩個完全不同的操作。初始化,是建立變數時賦予其乙個初始值。賦值,是把物件的當前值擦除,用乙個新值代替。

列表初始化:(<> p39)

作為c++11新標準的一部分,用花括號{}來初始化變數得到了全面應用。出於某些原因,這種初始化的方式叫做列表初始化。

現在,無論是初始化物件還是某些時候為物件賦新值,都可以使用一組花括號括起來的初始值了。

當用於內建型別的變數時,如果我們使用列表初始化且初始值存在丟失資訊的風險時,編譯器會報錯。

預設初始化:(<> p40)

如果定義變數時沒有指定初值,則變數被預設初始化。此時變數被賦予「預設值」。

什麼決定了預設值?

1.變數型別

2.定義變數的位置

如果是內建型別的變數未被顯示初始化,它的值由定義的位置決定。

·定義於任何函式體之外的變數被初始化為0

·一種例外,定義在函式體內部的內建型別變數將不被初始化(函式形參也是函式體內的自動變數,未被初始化也會是未定義的)

(未被初始化的內建型別變數的值是未定義的,如果試圖拷貝或以其他形式進行訪問將引發錯誤)

如果是類,由類自己決定初始化物件的方式。而且,是否允許不經過初始化就定義物件也由類自己決定。

絕大多數類都支援無需顯式初始化而定義物件,這樣的類提供了乙個合適的預設值。

(定義於函式體內的內建型別的物件如果沒有初始化,則其值是未定義的)

(類的物件如果沒有顯式地初始化,則其值由類確定)

小結1:

1.什麼是列表初始化? --> {}

2.什麼是預設初始化? --> 定義變數時沒有指定初值,則變數被預設初始化。

3.什麼決定預設值? --> 型別 + 位置

·內建型別,定義在任何函式體之外的變數被初始化為0

·類型別,由類自己決定。預設初始化應該就可以理解為呼叫預設的無參建構函式

附加一點 --> 對於類中那些依賴於編譯器合成的預設建構函式的內建型別成員,如果它們未在類內被初始化,那麼它們的值也是未定義的!(<> p236/p408)

**********/

#include #include using namespace std;

// 列表初始化

void init1()

; int num3;

int num4(0);

cout << num1 << num2 << num3 << num4 << endl;

long double ld = 3.1415926536;

// int a, b = ; // 錯誤:轉換未執行,因為存在丟失資訊的危險

int c(ld), d = ld; // 正確:轉換執行,且確實丟失了部分值

}int a1, a2, a3, a4; // 內建型別,函式體外,初始化為0

// 預設初始化

void init2()

class test

private:

char cc;

int a, b, c, d, e; // 未定義的!!!!! 雖然初看起來不在函式體內,但是其實應該這樣理解,這些變數是在建構函式中定義的,而建構函式也是乙個函式體,因此執行的是預設初始化,且是未定義的

string s = "hello"; // 提供了乙個類內初始值,在執行預設建構函式時,會用這個「類內初始值」來初始化該成員。否則,像上那樣執行預設初始化

};void init3()

void init4()

// 練習

string global_str;

int global_int;

void exercise1()

int main()

值初始化和預設初始化

引用 1 值初始化 顧名思義,就是用數值初始化變數。如果沒有給定乙個初始值,就會根據變數或類物件的型別提供乙個初始值。對於int型別其值初始化後的值為0。對於預設初始化內建型別變數來說 1 定義在函式體之外的變數是全域性變數,一般儲存在全域性區,儲存在全域性區的變數一般會執行值初始化。此時,其初始值...

初始化 指定初始化

id alloc 物件的誕生過程,主要是從作業系統獲得一塊足夠大的記憶體,以存放該類的全部例項變數,並將其指定為存放記憶體物件的實力變數的位置。alloc方法同時將這塊記憶體全部設定為0。結果是 bool變數初始化為no,所有的int型別變數為0,float變數為0.0,所有的指標為nil.obje...

預設初始化

雖然保險的做法是對每個變數都顯示初始化,但是了解一下預設初始化的規則也是很有必要的。1.定義於任何函式體之外的變數被初始化為0。2.定義在函式體內部的區域性變數不會被預設初始化。所以,它的值是未定義的 這裡的 未定義 我的理解 變數所分配記憶體中的二進位制資料,分配時是什麼就是什麼,機器會按照變數的...