在C++标准中,它表示删除复制构造函数时不生成默认构造函数?

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; 是用户声明的构造函数,因此编译器不会生成任何默认构造函数.