如何使转换运算符返回参考和非参考

Tot*_*son 2 c++ templates

我有一个模板类,看起来像:

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

  private:
       T value;

}
Run Code Online (Sandbox Code Playgroud)

似乎从未调用过operatorT()const。即使在这样的陈述中

const int a = myA;
Run Code Online (Sandbox Code Playgroud)

其中myA是A的实例。上述代码缺少某些地方吗?

Paw*_*arz 5

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

const A<int> myA;
int someInt = myA;
Run Code Online (Sandbox Code Playgroud)

会打电话给operator T() const

而且,既然这是真的-就像本杰明·林德利(Benjamin Lindley)指出的那样-如果您通过const引用访问对象。

  • 或者,如果您通过const引用访问对象。 (3认同)