以前不能在類定義中初始化成員? c++11允許這樣做了,其語法類似於下面:
class Session
{
int mem1 = 10;
double mem2 {1966.54};
short mem3;
public:
Session(); //#1
Session(short s) : mem3(s) {} //#2
Session(int n, double d, short s) : mem1(n), mem2(d),mem3(s) {} //#3
};
可以使用等號或大括號版本的初始化, 但不能使用園括號版本初始化。 其結果與給前兩個構造函數提供成員初始化列表, 並指定mem1 和 mem2
的值相同:
Session() : mem1(10), mem2(1996.54) {}
Session(short s) : mem1(10), mem2(1996.54), mem3(s) {}
通過使用類內初始化,可避免在構造函數中編寫重復的代碼, 從而降低了程序員的工作量,厭倦情緒 和出錯機會。
如果構造函數在成員初始化列表中提供了相應的值,這些默認值將會被覆蓋,因此第三個構造函數覆蓋了類內成員初始化。