Разница в инициализации по умолчанию членов структуры - PullRequest
1 голос
/ 04 мая 2020
struct Date1 {
  int day{1};
  int month{1};
  int year{2000};
};
struct Date2 {
  int day  =1;
  int month =1;
  int year =2000;
};
struct Date3 {
  Date() : day(1), month(1), year(2000) {}
  int day;
  int month;
  int year;
};

Есть ли разница в эффективности между этими тремя вариантами инициализации по умолчанию члена структуры?

1 Ответ

3 голосов
/ 04 мая 2020

Есть ли разница в эффективности между этими тремя вариантами инициализации по умолчанию члена структуры?

Нет. Инициализаторы членов класса - это просто 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) {}
};

В первом случае, если мне нужно изменить день по умолчанию, мне нужно изменить его только один раз. Во втором блоке кода мне нужно обновить его дважды, чтобы было больше работы, и чем больше работы, тем больше шансов ошибиться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...