我在书中读到了这个:
如果a,则将合成的复制赋值运算符定义为已删除 成员具有已删除或无法访问的复制赋值运算符,或者如果 该类有一个const或引用成员。
为什么我们不能使用引用类型?
答案 0 :(得分:1)
您正在谈论默认构造函数(而不是重新分配或复制构造函数)。
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;
};
编辑以回答编辑过的问
对于分配,const
值无法更改。
和引用就像非空的const指针。
请注意,复制构造函数没有此限制,因为您可能(并且必须) 初始化const`值。