【发布时间】:2014-11-16 06:17:03
【问题描述】:
下面是N3797::8.4.2/4 [dcl.fct.def.default]的引用:
一个函数是用户提供的,如果它是用户声明的而不是明确的 在第一次声明时违约或删除。用户提供的 显式默认函数(即,在其后显式默认) 第一个声明)在显式定义的地方定义 违约; 如果这样的函数被隐式定义为删除,则 程序格式错误。
我试图发明一个反映该规则的示例。因为,标准说:
如果类定义没有显式声明一个副本 构造函数,一个是隐式声明的。如果类定义 声明一个移动构造函数或移动赋值运算符,the 隐式声明的复制构造函数被定义为删除;
下面的代码应该抛出一个关于删除函数调用的错误:
#include <iostream>
using namespace std;
struct A
{
A(){ }
A(const A&&){ cout << "A(const&&)" << endl; }
A(const A&) = default;
};
A a;
A b = a;
int main() {
}
但它工作正常。你能提供一个反映这一点的实际例子吗?
【问题讨论】:
-
我认为你混淆了 implicit 和 user-provided 这两个术语,如果你声明一个函数,根据定义它不是 implicit 。一个特殊的函数可以在它的第一个声明中选择
defaulted,在这种情况下它不是user-provided,但这不会使它成为implicit。跨度>
标签: c++