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