7
struct B {
  B () {}
  B(int i) {}
};

struct D : B {
  using B::B;  // <--- new C++11 feature
};

D d1; // ok
D d2(3); // ok

现在,如果我在 的主体内添加一个新的构造函数struct D,例如:

struct D : B {
  using B::B;
  D(const char* pc) {}  // <--- added
};

然后D d1;开始给出编译器错误(ideone尚未升级,我使用的是g ++ 4.8.0)?但是D d2(3);仍然有效。

为什么在内部添加新构造函数时默认构造函数会打折struct D

4

1 回答 1

4

之间有细微的差别

struct D : B {
 using B::B;
 D(const char* pc) {}  // <--- added
};

相对

struct D : B {
 using B::B;
};

在第二种情况下,编译器会为您自动生成默认的“D(){}”构造函数。但是,如果您为 D 创建自己的构造函数,则默认的“D(){}”不再可用。当然你继承了 B 的默认构造函数,但这并没有告诉编译器如何默认构造 D。

于 2013-05-08T18:13:00.407 回答