使用Constructor获取默认成员值

时间:2013-05-21 12:56:23

标签: c++

在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
   };

2 个答案:

答案 0 :(得分:7)

不需要显式默认初始化a,因为它将是默认构造的。这样做会很好:

class Z
{
  std::vector<int> a;
  int b = 0;
  z() {} //<-- a, b already initialized
};

请注意,您的第二个变体是函数声明,而不是初始化:

// function a(), returns std::vector<int>
std::vector<int> a();

所以你应该使用的是

// data member a is an std::vector<int>. Default construct it.
std::vector<int> a{};

当然,如果你不想要默认构造,那么在声明点进行初始化非常方便:

std::vector<int> a{0,1,2,3};

答案 1 :(得分:1)

我的建议是这样做:

class Z{
   std::vector<int> a;
   int b = 0;

};

这是最短版本,也是最容易阅读的版本。它不会添加任何无用的混乱,并且很明显你是默认构造函数a并将b初始化为0