這個特性是真正極好的!非常好用且方便!降低工作量!
如果一個類有很多成員變量A,B,C,D...,而且有很多不同版本的構造函數c1,c2,c3....,每個不同的構造函數可能會選擇不同的成員來初始化,如果不在構造函數中將所有的成員變量都初始化一遍的話,那麼有些成員就沒有初始化,而沒有初始化的東西是非常可怕的!因此一定要保證都被初始化了,但是如果在不同的構造函數中將所有成員變量都初始化,重複的代碼必然變多。如何解決上面矛盾呢??這就要使用C++11提供的花括號來就地初始化了,這個真是極好的!注意:初始化成員列表是發生在就地初始化之前的。
EX:
//使用花括號進行就地初始化,很方便阿!
#include<string>
using namespace std;
class Mem
{
public:
Mem(int i) :m(i) {}
private:
int m;
};
class Group {
public :
Group();
Group(int a) :data(a) {}
Group(Mem m) :mem(m) {}
Group(int a, Mem m, string n) :data(a), mem(m), name(n) {}
private:
int data{ 1 };
Mem mem{ 0 };
string name{ "group" };
};
就像上面這個例子,只需要在special的構造函數中執行其special的操作即可,因爲有就地初始化操作的存在,所以不用擔心成員變量未被初始化。很棒!