2010-09-29 33 views
0

如果我有這兩個構造函數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對象進行顯式轉換?

+3

那些稍後必須維護該代碼的人(可能包括你,順便說一句),並使該構造函數爲'explicit'。 IME在長期的隱式轉換中會產生比他們的價值更大的麻煩。 – sbi 2010-09-29 22:05:07

+0

當有人讀這篇文章時,將MyClass(5)+ m放到一個更清晰的位置,而不必回頭去想知道它轉換了哪種類型,或者只是給它添加一個int。 – David 2010-09-29 23:34:22

+0

sbi:聽起來很合理。我如何使構造函數明確?只需在聲明前添加關鍵字explicit? – Moberg 2010-10-01 15:47:54

回答

5

總之,沒有。最簡潔的選項是MyClass(15,8) + m;

1

沒有,但你可以在地方建設:

MyClass m; 
m + MyClass(15,8); 
0

我不這麼認爲,但你爲什麼需要它是隱性的,而非明確的?如果你打算無論如何都要使用括號符號,它不是可以從一個單一的變量產生的東西,所以我不相信有任何缺點簡單地說:

myclass(15, 8) + m;

這將在堆棧中生成它,併產生與隱式轉換相同的結果。

相關問題