2011-09-08 83 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

相关问题