在C++ 11,可以做到這一點,而無需使用初始化列表初始化對象:使用構造默認成員值
class Z{
int a=0;
int b;
z():b(0){} //<-- a already initialized
};
什麼我不知道是類類型,這些是優選的:
class Z{
std::vector<int>a=std::vector<int>();
//or instead:
std::vector<int>a();
int b;
z():b(0){} //<-- a already initialized
};
嗯,我打算按照一般規則初始化所有東西,因此通常總是使用初始化器列表(如Scott Meyers所建議的),但在這種情況下,使用C++ 11初始化器功能。 – johnbakers
邁爾斯真的建議明確初始化具有完美良好默認構造函數的成員嗎?這似乎很奇怪的建議。你確定你沒有想到初始化列表(或聲明,現在這些日子)初始化事情的建議,而不是在構造函數體中分配它們嗎? –
@Fellowshee像std :: vector這樣的默認構造類並不意味着它是未初始化的。如果一個類型有一個默認的構造函數來設置一個有效的狀態,那麼讓這個類型被隱式調用似乎是最清晰的選項。 – Agentlien