Читаю книгу Beautiful C++. Там рассматривается вопрос о правильной инициализации полей класса и в качестве начального примера используется следующий код:
class piano
{
public:
piano();
private:
int number_of_keys;
bool mechanical;
std::string manufacturer;
};
piano::piano()
{
number_of_keys = 88;
mechanical = true;
manufacturer = "Yamaha";
}
На самом деле конструктор здесь не инициализирует, а перезаписывает значения полей класса, поскольку на момент запуска его кода все поля класса будут уже проинициализированы значениями по умолчанию. И хотя компилятор может иметь оптимизацию такого кода, неявно преобразуя его именно в инициализацию, полагаться на это, по мнению автора книги, никогда не следует. Далее но приводит более правильную версию кода конструктора:
piano::piano()
: number_of_keys(88)
, mechanical(true)
, manufacturer("Yamaha")
{}
Мне более привычен немного другой стиль написания:
piano::piano() :
number_of_keys(88),
mechanical(true),
manufacturer("Yamaha")
{}
А вот ещё нашёл документ, описывающий гугловский стиль написания кода на C++ https://google.github.io/styleguide/cppguide.html#Constructor_Initializer_Lists и в нём этот код выглядел бы вот так:
piano::piano()
: number_of_keys(88),
mechanical(true),
manufacturer("Yamaha") {
}
Какой стиль инициализации в конструкторе вы предпочитаете?
P.S. на этом разбор инициализации в книге не заканчивается, но меня заинтересовал стиль написания кода.