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的拷貝構造函數,賦值函數的參數為引用而不是常引用