我在书中读到:
如果成员具有已删除或不可访问的复制分配运算符,或者如果类具有 const 或引用成员,则合成的复制分配运算符被定义为已删除。
为什么我们不能使用引用类型?
我在书中读到:
如果成员具有已删除或不可访问的复制分配运算符,或者如果类具有 const 或引用成员,则合成的复制分配运算符被定义为已删除。
为什么我们不能使用引用类型?
您在谈论默认构造函数(而不是重新分配或复制构造函数)。
类型未显式定义默认构造函数的 const 成员
它禁止默认构造函数,否则您将拥有一个未初始化的 const 值(所以没用)。(如果不是const
,它未初始化的事实不是问题,我们可以稍后分配它)。
没有类内初始化程序的引用成员
这也是被禁止的,因为引用类似于非空 const 指针。
struct NoDefaultConstructor
{
// No default constructor can be generated.
const int i; // which value to set by default ?
int& r; // reference which object by default?
};
struct InClassInitializerSoDefaultConstruct
{
// default constructor is generated here.
const int i = 42;
int j;
int& r = j;
};
编辑回答编辑 Q
对于赋值,const
不能更改值。和引用就像非空常量指针。
请注意,复制构造函数没有此限制,因为您可能(并且必须)初始化 const` 值。