初始化列表的作用

2021-06-23 08:57:31 字數 794 閱讀 1353

我糾結的問題都在primer上有很好的解答

之前突然想到,為什麼要存在冒號這種初始化方法,在google被牆,沒辦法只能求助於度娘。。。

冒號這種初始化方法,也叫做,初始化列表,也就是變數初始化的時候呼叫的

意味著,在乙個類當中,乙個成員變數只能在初始化賦值。

比如: const, 比如引用&。

舉個例子:

class a

private:

int a;

const int b;

int &c;

};

這樣是不合法的, 因為b, c只能在初始化時賦值。

所以,只能如此初始化:

class a

private:

int a;

const int b;

int &c;

};

還有乙個比較重要的問題,就是初始化列表的初始化順序是怎樣的?

class a

{public:

a():b(a-1), a(b-1)

{ cout<

1-858993461

答案就是,初始化列表裡的順序,與初始化順序無關

這裡首先定義的是a,所以a先初始化為b - 1即 -858993460 - 1,-858993461

而b是第二個定義的,所以後初始化b為a- 1即-858993461,為-858993462

如果,沒有必要的情況下,還是少用初始化列表,盡量在建構函式中順序的定義。

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

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

初始化列表

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

初始化列表

初始化列表一般用於建構函式賦值的操作中,它的常用賦值物件有 1 常量 常資料成員只能用初始化列表來初始化 2 引用型別 3 無參建構函式的類的物件。具體格式為 類名 形參表 如int x,int y 成員資料 x 成員資料 y 意思是成員資料繫結x,y。下面以幾個例子來說明一下 一 求圓面積 inc...