结构成员默认初始化的差异

问题描述 投票:0回答:1
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;
};

这三种结构成员默认初始化的选项在效率上有什么区别吗?

c++ c++11 struct c++14 c++17
1个回答
3
投票

这三种结构成员默认初始化的方案在效率上有什么区别吗?

没有,在类中成员初始化器只是成员初始化列表的语法糖,所以它们产生的代码都是一样的。

真正的好处来自于当你有多个构造函数时,如

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) {}
};

在第一种情况下,如果我需要更改默认的日期,我只需要更改一次。 在第二个代码块中,我必须更新两次,所以这是更多的工作,而更多的工作带来了更多的错误机会。

© www.soinside.com 2019 - 2024. All rights reserved.