前一段時間寫了類似于這樣的一段代碼
class A
{
private:
int *const ptr;
public:
A():ptr(NULL)
{
}
};
A one;
A two;
two = one;
編譯時發現,編譯器提示說默認賦值操作符不能用,而當我去掉ptr成員的const關鍵字后,便好了。當時很納悶這是怎么搞的。
后來在好心人的幫助下,才意識到ptr是個const,所以默認的賦值操作符不能對ptr進行賦值。
唉,當時知道是這個原因后真的是羞澀難當,自己明知道const不能被賦值是常識問題,但當時卻死活沒能找出原因。
而更要人命的是我之前在
{偶爾學習C++標準} 之 [對象的復制 - 復制構造與賦值操作符] 中就已經對賦值操作符做了一些筆記,但我竟然把一些內容給忘了(也可能是壓根就沒注意)。
現在重新就自動合成的賦值操作符何時不能使用再單獨做一次筆記。
當類中擁有以下一種或幾種情況時,隱式定義的賦值操作符是不能使用的:
1.非靜態的const成員變量
2.非靜態的引用類型成員變量
3.非靜態的類類型的成員變量的賦值操作符不可訪問
4.(如果有)基類中的賦值操作符不可訪問
注,對于擁有以上情況中的一種或多種的類,標準中的用詞是:ill-formed。我不知道為什么要用ill-formed(字面意思:不規范),但不管怎樣,對于ill-formed,編譯器的行為就是,無法編譯通過。
后記:希望這次不要再忘記這些內容了。
posted on 2010-05-08 16:21
zhaoyg 閱讀(527)
評論(2) 編輯 收藏 引用 所屬分類:
C/C++學習筆記