wye*_*r33 4 c++ constructor language-lawyer c++11
C++ 11程序
struct Foo {
Foo(Foo const &) = delete;
};
int main() {
Foo foo;
}
Run Code Online (Sandbox Code Playgroud)
生成错误
$ 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
Run Code Online (Sandbox Code Playgroud)
现在,由于复制构造函数已被删除,因此无法生成默认构造函数.我将假设这是预期的行为,但在C++标准中它指定在删除复制构造函数时不应生成默认构造函数?
chr*_*ris 10
来自N3485§12.1[class.ctor]/5:
如果类X没有用户声明的构造函数,则没有参数的构造函数被隐式声明为默认值(8.4).
Foo(Foo const &) = delete; 是用户声明的构造函数,因此编译器不会生成任何默认构造函数.