2011-09-08 82 views
3
class A 
{ 
public: 
    A (unsigned _a) : a (_a) 
    { 
    } 
    operator unsigned&() 
    { 
     return a; 
    } 
    operator const unsigned() const 
    { 
     return a; 
    } 
    unsigned a; 
}; 

在上面的例子中,我創建了兩個類型轉換運算符,一個給出引用,一個給出副本。兩者都有缺點。任何建議?類型轉換重載的最佳做法是什麼?


由於C++允許使用類型轉換運算符,因此我們如何充分利用它以及在哪裏?

+1

如果您'運營商無符號()'常數(即'運營商無符號()const'),那麼你可以(也應該)兼得。 – ildjarn

+2

也請確保你閱讀了足夠的在線資料,告訴他們爲什麼有一個壞主意有轉換操作員(他們不稱爲「轉換操作員」,因爲它是一個轉換,而不是一個演員,並且不,不存在「 implcit cast「) – PlasmaHH

回答

3

如何使第二個const作爲您無論如何返回的副本。這將消除不確定性:

class A 
{ 
public: 
    A (unsigned _a) : a (_a) 
    { 
    } 
    operator unsigned&() 
    { 
     return a; 
    } 
    operator unsigned() const // make this one const 
    { 
     return a; 
    } 
    unsigned a; 
}; 
+0

我猜這是有效的,但這是最佳做法嗎? –

+0

最好的做法可能不是讓這些操作員超載,除非有迫切的需求。這絕對不是你所做的事情,「因爲這對調用者來說很方便」。 – UncleBens

相關問題