说我有这样的代码:
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
。
感谢。
答案 0 :(得分:3)
类内体成员初始值设定项只是一个默认值。如果构造函数的成员初始值设定项列表也初始化该成员,则它始终优先。
这是由C ++ 11规范中的12.6.2p9指定的。