-1

我在书中读到:

如果成员具有已删除或不可访问的复制分配运算符,或者如果类具有 const 或引用成员,则合成的复制分配运算符被定义为已删除。

为什么我们不能使用引用类型?

4

1 回答 1

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;
};

编辑回答编辑 Q

对于赋值,const不能更改值。和引用就像非空常量指针。

请注意,复制构造函数没有此限制,因为您可能(并且必须)初始化 const` 值。

于 2014-08-31T15:41:00.100 回答