iam*_*ind 7 c++ constructor using default-constructor c++11
struct B {
B () {}
B(int i) {}
};
struct D : B {
using B::B; // <--- new C++11 feature
};
D d1; // ok
D d2(3); // ok
Run Code Online (Sandbox Code Playgroud)
现在,如果我在体内添加一个新的构造函数struct D,例如:
struct D : B {
using B::B;
D(const char* pc) {} // <--- added
};
Run Code Online (Sandbox Code Playgroud)
然后D d1;开始给出编译器错误(ideone尚未升级,我使用的是g ++ 4.8.0)?但D d2(3);仍然有效.
为什么在内部添加新构造函数时会打折默认构造函数struct D?
之间有细微的差别
struct D : B {
using B::B;
D(const char* pc) {} // <--- added
};
Run Code Online (Sandbox Code Playgroud)
相对
struct D : B {
using B::B;
};
Run Code Online (Sandbox Code Playgroud)
在第二种情况下,编译器会自动为您生成默认的“D(){}”构造函数。但如果您为 D 创建自己的构造函数,则默认的“D(){}”将不再可用。当然,您继承了 B 的默认构造函数,但这并没有告诉编译器默认情况下如何构造 D。
| 归档时间: |
|
| 查看次数: |
2035 次 |
| 最近记录: |