2014-08-31 98 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