我不明白为什么你不能编译一个类,它既有一个成员(不是默认可构造的),又有一个大括号或相等的初始化器和一个继承的构造器。g++ 说:
test.cpp:22:15: 错误:使用已删除函数 'Derived::Derived(float)'<br> Derived d(1.2f);
test.cpp:16:13:注意:'Derived::Derived(float)' 被隐式删除
,因为默认定义格式错误:
使用 Base::Base;test.cpp:16:13: 错误: 没有匹配函数调用'NoDefCTor::NoDefCTor()'<br> test.cpp:5:1: 注意: 候选:
NoDefCTor::NoDefCTor(int) NoDefCTor(int) {}
无法编译的代码(在 g++ 5.1 下):
struct NoDefCTor
{
NoDefCTor(int) {}
};
struct Base
{
Base(float) {}
};
struct Derived : Base
{
using Base::Base;
NoDefCTor n2{ 4 };
};
int main()
{
Derived d(1.2f);
}
编译的代码,但从不使用 NoDefCTor
的默认构造函数(尽管显然需要它!):
struct NoDefCTor
{
NoDefCTor(int) {}
NoDefCTor() = default;
};
struct Base
{
Base(float) {}
};
struct Derived : Base
{
using Base::Base;
NoDefCTor n2{ 4 };
};
int main()
{
Derived d(1.2f);
}
当我不需要一个默认构造函数时,我真的不喜欢这个想法。附带说明一下,两个版本在 MSVC14 上都可以正常编译(和运行)。