c++中初始化列表在構造函數中作用:
include<iostream>
class A{
public:
int a;
const int b;
A():b(0),a(0){}
};
int main()
{
A a;
return 0;
}
如果類A中使用構造函數將報錯
A::A(){
a = 0;
b = 0;
}
在以下情況時必須用帶有初始化列表的構造函數:
1. 成員類型是沒有默認構造函數的類。若沒有提供顯示初始化式,則編譯器隱式使用成員類型的默認構造函數,若類沒有默認構造函數,則編譯器嘗試使用默認構造函數將會失敗。
2. const成員或引用類型的成員。因爲const對象或引用類型只能初始化,不能對他們賦值。
初始化數據成員與對數據成員賦值的含義是什麼?有什麼區別?
首先把數據成員按類型分類並分情況說明:
1. 內置數據類型,複合類型(指針,引用)
在成員初始化列表和構造函數體內進行,在性能和結果上都是一樣的
2.用戶定義類型(類類型)
結果上相同,但是性能上存在很大的差別。因爲類類型的數據成員對象在進入函數體前已經構造完成,也就是說在成員初始化列表處進行構造對象的工作,調用構造函數,在進入函數體之後,進行的是對已經構造好的類對象的賦值,又調用個拷貝賦值操作符才能完成(如果並未提供,則使用編譯器提供的默認按成員賦值行爲),所以對非內置類型成員變量,爲了避免兩次構造,推薦使用類構造函數初始化列表。