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

How does constructor delegation interact with non-static data member initialization?

本文关键字:静态 数据成员 初始化 交互 构造函数      更新时间:2023-10-16

假设我有一些这样的代码:

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

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

谢谢。

in类主体成员初始化项只是一个默认值。如果构造函数的成员初始化列表也初始化了该成员,则它始终具有优先级。

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