【发布时间】:2013-01-28 23:05:22
【问题描述】:
我的 c++ 书是这样说的(lippman,c++ Primer,第五版,第 508 页):
如果类 ... 有一个其类型未明确定义默认构造函数的 const 成员并且该成员没有类内初始化程序,则合成的默认构造函数被定义为已删除。 (我的重点)
为什么这段代码会产生错误?
class Foo {
Foo() { }
};
class Bar {
private:
const Foo foo;
};
int main() {
Bar f; //error: call to implicitly-deleted default constructor of 'Bar'
return 0;
}
上面的规则似乎表明它不应该是一个错误,因为 Foo 确实明确定义了一个默认构造函数。有什么想法吗?
【问题讨论】:
-
我不认为你的引用在这里相关,因为
Foo确实明确定义了一个默认构造函数。引用说你的代码没问题是不正确的。 -
@KerrekSB 你是对的,但是这本书必须省略一些我也应该知道的其他规则,因为其他规则都没有提到与默认构造函数相关的任何内容。 (关于何时删除复制控制成员和默认构造函数有4条规则。)
标签: c++