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 ++标准中,它指定在删除复制构造函数时不应该生成默认构造函数吗?
从N3485§12.1[class.ctor] / 5:
如果没有用户声明的类X构造函数,则将不带参数的构造函数隐式声明为默认值(8.4)。
Foo(Foo const &) = delete;
是用户声明的构造函数,因此编译器不会生成任何默认构造函数。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句