十八 初始化列表的使用

2022-08-11 13:48:20 字數 1725 閱讀 5170

1、類中定義const成員,及其初始化

#include class test

};int main()

如何初始化類裡面的const成員?

首先考慮建構函式初始化

class test

int getci()

}

於是出現了初始化列表

c++中提供了初始化列表對成員變數進行初始化

語法規則:

// 建構函式

// 初始化列表在建構函式的地方使用

// 在建構函式的定義之後,函式體之前,加 :號,初始化列表對成員變數進行初始化

// 用v1對m1進行初始化,用v1,v2對m2進行初始化,用v3對m3進行初始化

classname::classname() : m1(v1), m2(v1,v2), m3(v3)

{}

通過初始化列表對ci 進行初始化

class test

int getci()

};

類成員的初始化, 注意事項:

// 初始化順序和初始化列表無關,和宣告順序相同

classname::classname() : m1(v1), m2(v1,v2), m3(v3)

{}

建構函式是在物件建立完成之後,再呼叫建構函式進行成員變數的初始化,其實是乙個成員變數的賦值函式,並非真正意義上的初始化

初始化列表則是在物件建立的同時就對物件進行了初始化,順序先於建構函式函式體

區別類似於變數的初始化和賦值

int a = 1;	// 類似於初始化列表

int a;

a = 1; // 類似於建構函式

#include class value

int geti()

};class test

};int main()

類中的const成員

編譯器無法直接得到const成員的初始值,因此無法進入符號表成為真正意義上的常量。

const成員分配的空間的位置和當前物件一樣,物件在棧區,const成員就在棧區

#include class value

int geti()

};class test

int getci()

int setci(int v)

};int main()

初始化與賦值的區別:

初始化:對正在建立的物件進行初始值設定

賦值:對已經存在的物件進行值設定

2、小結
類中可以使用初始化裡列表對成員進行初始化

初始化列表先於建構函式體進行

類中可以定義const成員變數

const成員變數必須在初始化列表中指定初值

const成員變數為唯讀變數

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

初始化的基本概念 事實 初始化和賦值是兩個完全不同的操作。初始化,是建立變數時賦予其乙個初始值。賦值,是把物件的當前值擦除,用乙個新值代替。列表初始化 p39 作為c 11新標準的一部分,用花括號 來初始化變數得到了全面應用。出於某些原因,這種初始化的方式叫做列表初始化。現在,無論是初始化物件還是某...

c 使用初始化列表來初始化字段

includeusing namespace std class student1 student1 int i b i a b 異常順序 發現a的值為0 b的值為2 說明初始化僅僅對b有效果,對a沒有起到初始化作用 student1 int a,int b a a b b 正常順序 發現a b 2...

初始化列表

與其他函式不同,建構函式除了有名字,引數列表和函式體之外,還可以有初始化列表,初始化列表以冒號開頭,後跟一系列以逗號分隔的初始化字段。在c 中,struct和class的唯一區別是預設的克訪問性不同,而這裡我們不考慮訪問性的問題,所以下面的 都以struct來演示。struct foo 初始化列表 ...