2014-02-26 66 views
1

我有一个模板类,看起来像:如何使转换操作符返回参考和非参考

template<class T> 
class A 
{ 
    public: 
    operator T() const { return value;} 
    operator T&() { return value;} 

    private: 
     T value; 

} 

看来,operatorT()const的永远不会被调用。即使是在这样的

const int a = myA; 

其中MYA是A. 的实例声明中有什么问题,与上面的代码失踪?

+0

与你的问题没有直接关系,但我认为这可能是一个不好的做法。更好的办法是让'operator T()const'返回'const T&',或者让两个操作符返回'T'。 'const'对象不应该与非''contst'对象具有不同的语义*,除非*它们不能被修改。 – Brian

+0

'&&'另一方面应该返回'T'或'T &&'。 – Yakk

回答

4

只有当您定义类型为const A<T>的对象时,该运算符才会生效。例如:

const A<int> myA; 
int someInt = myA; 

将调用operator T() const

而且,因为它当然是真的 - 就像Benjamin Lindley指出的那样 - 如果您通过const引用访问该对象。

+3

或者如果你通过const引用访问对象。 –