如果我有這兩個構造函數MyClass
:隱式轉換,通過構造一個包含多個參數
MyClass(int n1);
MyClass(int n1, int n2);
和重載(非會員)operator+
:
MyClass operator+(MyClass m1, const MyClass& m2);
這使我寫這樣的代碼這個:
MyClass m;
5 + m:
其中我猜使用隱式投射通過定義的構造函數,正確?
有沒有辦法做到這一點隱式轉換構造函數採取2個參數?代碼看起來像這樣:
MyClass m;
{15, 8} + m:
?
或者,也許只是從{9,4}到MyClass
對象進行顯式轉換?
那些稍後必須維護該代碼的人(可能包括你,順便說一句),並使該構造函數爲'explicit'。 IME在長期的隱式轉換中會產生比他們的價值更大的麻煩。 – sbi 2010-09-29 22:05:07
當有人讀這篇文章時,將MyClass(5)+ m放到一個更清晰的位置,而不必回頭去想知道它轉換了哪種類型,或者只是給它添加一個int。 – David 2010-09-29 23:34:22
sbi:聽起來很合理。我如何使構造函數明確?只需在聲明前添加關鍵字explicit? – Moberg 2010-10-01 15:47:54