Есть ли разница в эффективности между этими тремя вариантами инициализации по умолчанию члена структуры?
Нет. Инициализаторы членов класса - это просто syntacti c sugar для списка инициализации членов, поэтому все они генерируют один и тот же код.
Настоящим преимуществом является наличие нескольких конструкторов, таких как
struct Date {
int day{1};
int month{1};
int year{2000};
Date(int year) : year(year) {}
Date(int year, int month) : year(year), month(month) {}
Date(int year, int month, int day) : year(year), month(month), day(day) {}
};
против
struct Date {
int day;
int month;
int year;
Date(int year) : year(year), month(1), day(1) {}
Date(int year, int month) : year(year), month(month), day(1) {}
Date(int year, int month, int day) : year(year), month(month), day(day) {}
};
В первом случае, если мне нужно изменить день по умолчанию, мне нужно изменить его только один раз. Во втором блоке кода мне нужно обновить его дважды, чтобы было больше работы, и чем больше работы, тем больше шансов ошибиться.