Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何使转换运算符返回引用和非引用_C++_Templates - Fatal编程技术网

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;