模板資料成員變數初始化

2021-10-22 03:14:22 字數 2211 閱讀 5685

在定義模板類後,會面臨如何對模板資料成員變數進行初始化,對於用途十分明確的模板類,可以根據用途直接定義初始化的型別。但對於通用模板類,成員變數的型別可能是基本型別,也可能是復合型別,所以需要使用通用的初始化手段。

在c++中可以使用初始化列表對任何型別進行初始化,不論是基本型別還是復合型別。

// 值初始化,例如 

std::string s

;// 直接初始化,例如

std::string s

("hello");

// 複製初始化,例如

std::string s =

"hello"

;// 列表初始化,例如

std::string s

;// 聚合初始化,例如

char a[3]

=;// 引用初始化,例如

char

& c = a[0]

;

那麼對於以上幾種初始化的方式,建構函式的初始化列表中應該如何去寫呢?

// 方式1: 

// 這樣寫?

template

<

class

t>

class

class

)private

: t a;

};

// 方式2: 

// 這樣寫?

template

<

class

t>

class

class

private

: t a;

};

使用方式1對基本型別進行初始化時,會有這樣的錯誤:cannot initialize non-class type 'int' with a parenthesized initializer list,意思是說不能使用帶括號的初始化列表初始化非類型別int。因為基本型別沒有建構函式,所以就辦法通過列表初始化。只能通過值初始化。

正確的做法應該採用方式2,因為不論是基本型別還是類型別,都可以通過值初始化的方式進行初始化。

在定義模板類後,會面臨如何對模板資料成員變數進行初始化,對於用途十分明確的模板類,可以根據用途直接定義初始化的型別。但對於通用模板類,成員變數的型別可能是基本型別,也可能是復合型別,所以需要使用通用的初始化手段。

在c++中可以使用初始化列表對任何型別進行初始化,不論是基本型別還是復合型別。

// 值初始化,例如 

std::string s

;// 直接初始化,例如

std::string s

("hello");

// 複製初始化,例如

std::string s =

"hello"

;// 列表初始化,例如

std::string s

;// 聚合初始化,例如

char a[3]

=;// 引用初始化,例如

char

& c = a[0]

;

那麼對於以上幾種初始化的方式,建構函式的初始化列表中應該如何去寫呢?

// 方式1: 

// 這樣寫?

template

<

class

t>

class

class

)private

: t a;

};

// 方式2: 

// 這樣寫?

template

<

class

t>

class

class

private

: t a;

};

使用方式1對基本型別進行初始化時,會有這樣的錯誤:cannot initialize non-class type 'int' with a parenthesized initializer list,意思是說不能使用帶括號的初始化列表初始化非類型別int。因為基本型別沒有建構函式,所以就辦法通過列表初始化。只能通過值初始化。

正確的做法應該採用方式2,因為不論是基本型別還是類型別,都可以通過值初始化的方式進行初始化。

初始化列表成員變數的初始化

對於以下程式 include using namespace std class base base b 0 a b int get a int get b int main 本想得到的結果是a,b都為90。但是實際結果卻是 4273046 90process returned 0 0x0 exec...

c 成員變數初始化

include include using namespace std classa a a intmain 類a的成員變數將進行預設初始化 c 11新特性允許為資料成員提供類內初始值 include include using namespace std classa a a intmain a....

類成員變數初始化

在 c 中,類的成員變數未初始化問題,取決於物件建立方式,不同的建立方式,直接導致類成員變數的初值不同。本文通過下例,得出一下結論 1.在函式體內置立乙個物件,類成員變數和普通的區域性變數一樣,是乙個隨機值。2.建立乙個全域性成員物件,類成員變數和全域性變數一樣,編譯器賦值為 0。3.在函式體內 n...