构造函数委托如何与非静态数据成员初始化交互?

时间:2011-10-03 17:12:52

标签: c++ initialization c++11

说我有这样的代码:

class Foo
{
public:
  Foo(int v) : value(v) {}
  Foo() : Foo(42) {}
private:
  int value = 666;
};

默认ctor是否将value设置为42或666?我想我希望42,因为这是一个明确的电话,但我可以想象另一种方式。

继承怎么样?

class Base
{
public:
  Base() { }
  virtual ~Base() { }
  virtual int f() = 0;
};

class Bar : public Base
{
public:
  Bar(int _i) : Base(), i(_i) { }
  Bar() : Bar(-1) { }
  virtual ~Bar() { }
  virtual int f() { }
private:
  int i = 777;
};

同样,我希望i == -1

感谢。

1 个答案:

答案 0 :(得分:3)

类内体成员初始值设定项只是一个默认值。如果构造函数的成员初始值设定项列表也初始化该成员,则它始终优先。

这是由C ++ 11规范中的12.6.2p9指定的。