2014-08-31 197 views
-1

我在书上看到这样的:合成的默认构造函数

合成的拷贝赋值运算符被定义为删除如果 成员已被删除或无法拷贝赋值运算符,或者如果 类有一个const或引用成员。

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

+0

由于引用*与const指针*相似,不能更改(仅初始化) – firda 2014-08-31 15:49:49

+1

在您的原始问题中,您已经表明理解了'const'的推理:您不能重新分配'const'变量。既然同样的推理也适用于参考变量,我不太明白你在问什么。 – hvd 2014-08-31 15:50:04

回答

1

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

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`值。

+0

对不起。我改变了我的问题。 – Zeukis 2014-08-31 15:48:22