class MyClass
{
private:
int a;
int b;
const int max;
.....
}
對於const數據成員,我們不能像常規的那樣使用構造函數來初始化,也就是不能像下面的e.g那么做。對此,c++提供了特殊的語法來初始化const數據成員---成員初始化列表。
首先,來看看為什么不能這么做?
e.g
MyClass(int c)
{
a =0;
b =0;
mac = c;//no,這里出錯。
}
我們都知道const變量一定要在創建的時候初始化:
const int num = 1;//yes
const int num;
num = 1;//no
接下來談談在構造函數中為什么不能使用max = c之類的賦值語句為const成員提供值。
從概念上講,調用構造函數時,對象在程序進入構造函數函數體之前被創建。也就是說,調用構造函數的時候,先創建對象,再進入函數體。對於MyClass()構造函數來說,先為三個成員分配內存,然后再進入函數體之心賦值語句。
對於max成員來說,就類似於const int max; max =c;
這對於const成員來說是不行的,const成員應該在分配內存的時候進行初始化。對此,c++提供了初始化列表語法來完成這項工作。
使用語法不做詳述。
注意事項:
1,初始值可以是常值或構造函數參數,並且這種方法不限於初始化常量,也可以用於初始化其他成員。
但是引用成員和const成員必須使用這種方法(c++11中提供了更直觀的方式)。普通數據成員既可以使用這種方法,也可以使用普通的方法。
MyClass(int x):a(0),b(0),max(x)
{
}
或者
myClass(int x):max(x)
{
a =0;b = 0;
}
2,只有構造函數可以使用初始化列表語法,另外,引用數據成員與const數據成員必須使用這種語法,因為他們在創建時初始化。
注意:不能將初始化列表語法用於其他類方法。
c++11提供了更直觀的方式進行初始化。
Class MyClass
{
int mem1 = 0;
const int mem2 = 2;
};
這與在構造函數中使用初始化列表語法等價。
