C++筆記

1,因此,某些時候,explicit 可以有效得防止構造函數的隱式轉換帶來的錯誤或者誤解

2,

explicit 只對構造函數起作用,用來抑制隱式轉換。如:
class A {
A(int a);
};
int Function(A a);

當調用 Function(2) 的時候,2 會隱式轉換爲 A 類型。這種情況常常不是程序員想要的結果,所以,要避免之,就可以這樣寫:

class A {
explicit A(int a);
};
int Function(A a);

這樣,當調用 Function(2) 的時候,編譯器會給出錯誤信息(除非 Function 有個以 int 爲參數的重載形式),這就避免了在程序員毫不知情的情況下出現錯誤。
3, 構造函數的explicit關鍵詞有效阻止從一個“裸”指針隱式轉換成auto_ptr類型。
 

 

 

4,與引用計數型智能指針不同的,auto_ptr要求其對“裸”指針的完全佔有性。也就是說一個”裸“指針不能同時被兩個以上的auto_ptr所擁有。那麼,在拷貝構造或賦值操作時,我們必須作特殊的處理來保證這個特性。auto_ptr的做法是“所有權轉移”,即拷貝或賦值的源對象將失去對“裸”指針的所有權,所以,與一般拷貝構造函數,賦值函數不同, auto_ptr的拷貝構造函數,賦值函數的參數爲引用而不是常引用(const reference

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章