将默认构造函数合成为已删除

synthesized default constructor as deleted

本文关键字:删除 默认 构造函数      更新时间:2023-10-16

我在书中读到了这一点:

如果成员具有已删除或无法访问的副本分配运算符,或者如果类具有const或引用成员。

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

您谈论的是默认构造函数(而不是重新分配或复制构造函数)。

类型未显式定义默认构造函数的const成员

它禁止默认构造函数,否则您将有一个未初始化的常量值(因此毫无用处)。(如果它不是const,那么它未初始化的事实不是问题,我们可以稍后分配它)。

没有类内初始值设定项的引用成员

它也是被禁止的,因为引用类似于非null常量指针。

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值。和引用类似于非null常量指针。

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