在一般情况下,你如何申报索引[ ]
的读取和写入accesss一类的运营商?
我想是这样
/**
* Read index operator.
*/
T& operator[](T u);
/**
* Write index operator
*/
const T& operator[](T u);
它给我的错误
../src/Class.h:44:14: error: 'const T& Class::operator[](T)' cannot be overloaded
../src/Class.h:39:8: error: with 'T& Class::operator[](T)'
你的可变版本是好的:
T& operator[](T u);
但const
版本应该是一个const
成员函数以及返回一个const
参考:
const T& operator[](T u) const;
^^^^^
这不仅从其他重载区别开来,也可以让(只读)访问const
的类的实例。 一般地,重载成员函数可以通过它们的参数类型和const /易失性的资格进行区分,而不是通过返回类型。
您只需有一个会被用于读取和写入一个过载:
T& operator[](int);
说了这么多,你可能还需要有一个const
过载:
const T& operator[](int) const;
这将提供只读索引到const
类的实例。
你得到的错误,因为重载函数不能返回类型而不同。 但他们可以通过常量性差异。
/**
* Write index operator.
*/
T& operator[](T u);
/**
* Read index operator
*/
const T& operator[](T u) const;
注意“写”和“读”交换了位置。
另外,不要你实际上意味着运营商的说法是一些整型?