c 初始化列表

2021-09-24 05:57:51 字數 1100 閱讀 1522

首先明確一點:初始化和賦值是兩個不同的概念

看下面的**

#include#includeusing namespace std;

class test

test(int _a, int _b,int _c) :a(_a), b(_b)//這是初始化列表,是真正的初始化

private:

int a;

int b;

const int c;

};void main()

這段**可以明確的告訴我們,初始化列表是真正的初始化,因為const的變數必須賦初值,而如果把初始化的過程寫在裡面的話

其實這並不是初始化,而是賦值。

看下面的**

#include#include#includeusing namespace std;

class test

test(string _s)

private:

string s;

};void main()

如果我們沒有使用初始化列表,那麼資料成員將在建構函式函式體之前執行預設初始化

,例如上面的**輸出的是空串,這是string的預設初始化。或者我們可以自己寫乙個類

來看看效果。看下面的**

​#include#include#includeusing namespace std;

class mystring//只是用做實驗的類,切記不要這樣寫

private:

char *p;

};class test

test(string _s)

private:

mystring s;

};void main()

你可以自己寫兩個類進行實驗,這段**列印的結果是「helloword」。

下面引用c++primer的一段話

在很多類中,初始化和賦值的區別事關底層效率的,乙個是直接初始化,

而另外乙個卻是先初始化後賦值。而且不單單是效率問題,一些資料成員必須

初始化,而不是賦值,所以建議使用初始化列表。

c 初始化列表

與其他函式不同,建構函式除了有名字,引數列表和函式體之外,還可以有初始化列表,初始化列表以冒號開頭,後跟一系列以逗號分隔的初始化字段。struct foo 初始化列表 建構函式的兩個執行階段 從概念上來講,建構函式的執行可以分成兩個階段,初始化階段和計算階段,初始化階段先於計算階段 初始化階段 所有...

C 初始化列表

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

C 初始化列表

與其他函式不同,建構函式除了有名字,引數列表和函式體之外,還可以有初始化列表,初始化列表以冒號開頭,後跟一系列以逗號分隔的初始化字段。struct foo 初始化列表 建構函式的執行可以分成兩個階段,初始化階段和計算階段,初始化階段先於計算階段。所有類型別 class type 的成員都會在初始化階...