C ++ 11程序
struct Foo {
Foo(Foo const &) = delete;
};
int main() {
Foo foo;
}
生成错误
$ g++ -std=c++11 junk.cpp -o junk
junk.cpp: In function 'int main()':
junk.cpp:6:9: error: no matching function for call to 'Foo::Foo()'
junk.cpp:6:9: note: candidate is:
junk.cpp:2:5: note: Foo::Foo(const Foo&) <deleted>
junk.cpp:2:5: note: candidate expects 1 argument, 0 provided
现在,由于复制构造函数已被删除,因此无法生成默认构造函数。我将假设这是预期的行为,但在C ++标准中它指定在删除复制构造函数时不应生成默认构造函数?
答案 0 :(得分:10)
来自N3485§12.1[class.ctor] / 5:
如果类X没有用户声明的构造函数,则没有参数的构造函数被隐式声明为默认值(8.4)。
Foo(Foo const &) = delete;
是用户声明的构造函数,因此编译器不会生成默认构造函数。