C++ 如何使转换运算符返回引用和非引用
我有一个模板类,看起来像:C++ 如何使转换运算符返回引用和非引用,c++,templates,C++,Templates,我有一个模板类,看起来像: template<class T> class A { public: operator T() const { return value;} operator T&() { return value;} private: T value; } 其中myA是a的一个实例。 上面的代码是否有错误,缺少了什么?只有当您定义了类型为常量A的对象时,运算符才会生效。例如: const A<int>
template<class T>
class A
{
public:
operator T() const { return value;}
operator T&() { return value;}
private:
T value;
}
其中myA是a的一个实例。
上面的代码是否有错误,缺少了什么?只有当您定义了类型为
常量A
的对象时,运算符才会生效。例如:
const A<int> myA;
int someInt = myA;
constamya;
int-someInt=myA;
将调用运算符T()const
而且,正如前面指出的,如果你通过一个
常量
引用来访问对象,或者如果你通过一个常量引用来访问对象,这当然是正确的。这与你的问题没有直接关系,但我认为这样做可能是不好的做法。最好使运算符T()常量
返回常量T&
,或者使两个运算符都返回T
<代码>常量对象不应与非常量
对象具有不同的语义,除非它们不能修改。&
应返回t
或t&
。
const A<int> myA;
int someInt = myA;