В 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
};
Ну, я собираюсь сделать общее правило, что вы должны инициализировать все, и поэтому обычно всегда используете список инициализаторов для всего (как это предложил Скотт Майерс), но в этом случае вместо этого используется возможность инициализации C++ 11. – johnbakers
Действительно ли Meyers предлагал явно инициализировать членов, которые имеют совершенно хорошие конструкторы по умолчанию? Это кажется довольно странным советом. Вы уверены, что не думаете о том, чтобы инициализировать вещи в списке инициализаторов (или декларации, в наши дни), а не назначать их в теле конструктора? –
@Fellowshee Наличие класса, такого как 'std :: vector'be по умолчанию, не означает, что он не инициализирован. Если у типа есть конструктор по умолчанию, который устанавливает допустимое состояние, позволяя ему называть неявным образом, мне кажется самым ясным вариантом. – Agentlien