如果您明确指出某些默认值,则不会生成其他默认定义.
但是,gcc 4.9.1似乎并非如此.举个例子:
#include <iostream>
using namespace std;
struct A
{
int data;
A() = default;
A(const A&) = default;
};
int main()
{
A a;
a.data = 10;
A b(a);
A c;
c = a;
cout<<b.data<<endl;
cout<<c.data<<endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
它编译并给出预期的输出.即已生成默认赋值运算符.
我是否误解了Stroustrup的评论?
首先,您的代码不使用类的赋值运算符,因此它不会证明它存在.但是,添加它的使用
c = a;
Run Code Online (Sandbox Code Playgroud)
会工作,所以问题仍然存在.
声明任何特殊函数都不会阻止生成所有其他特殊函数,这似乎就是您解释引用的方式.宣布一些会抑制其他一些人.没有阅读这本书以引用上下文,我不能说它是否具有误导性.
规则大致是:
这是一种简化; 有更多的细微差别和例外.如果您想了解血腥细节,请阅读语言规范.