myclass (unsigned int param) : param_ (param)
這種結構被稱爲成員初始化列表在C++中。
它初始化您的會員param_
的值爲param
。
是什麼初始化之間分配的內部構造的區別? &
有什麼優勢?
初始化使用初始化列表的成員並在構造函數體內爲其指定值之間有區別。
當你通過初始化列表初始化字段時,構造函數將被調用一次。
如果您使用賦值,那麼這些字段將首先使用默認構造函數進行初始化,然後使用實際值重新分配(通過賦值運算符)。
正如你所看到的那樣,在後者中創建&賦值會有額外的開銷,這對於用戶定義的類可能相當重要。
對於整數數據類型(爲此使用它)或POD類成員,沒有實際的開銷。
當你HAVE TO
使用成員初始化列表?
你將有(而被迫)使用,如果一個成員初始化列表:
你的類有一個基準件
你的類有一個const成員或
你的類沒有默認構造函數
甲代碼示例描繪HAVE TO
情況:
class MyClass
{
public:
int &i; //reference member, has to be Initialized in Member Initializer List
int j;
const int k; //const member, has to be Initialized in Member Initializer List
MyClass(int a, int b, int c):i(a),j(b),k(c)
{
}
};
class MyClass2:public MyClass
{
public:
int p;
int q;
MyClass2(int x,int y,int z,int l,int m):MyClass(x,y,z),p(l),q(m)
{
}
};
int main()
{
int x = 10;
int y = 20;
int z = 30;
MyClass obj(x,y,z);
int l = 40;
int m = 50;
MyClass2 obj2(x,y,z,l,m);
return 0;
}
MyClass2
沒有默認構造函數,因此必須通過成員初始值設定項列表進行初始化。
請停止傳播此功能的術語「初始化程序列表」。初始化程序列表不同。 –
請教,什麼是「初始化列表」?據我所知,這是正確的術語,並且Google同意... –
@Tomalak:什麼是正確的術語? 「初始化列表」和「初始化列表」是我聽過或看到過的唯一兩個。但重要的是,如果你知道不同的話,那就很重要。 –