通常,如何为读取和写入访问声明类的索引[ ]
运算符?
我试过像
这样的东西/**
* 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)'
答案 0 :(得分:14)
你的可变版本很好:
T& operator[](T u);
但const
版本应该是const
成员函数,并返回const
引用:
const T& operator[](T u) const;
^^^^^
这不仅可以将其与其他重载区分开来,而且还允许(只读)访问类的const
个实例。通常,重载的成员函数可以通过它们的参数类型和const / volatile资格来区分,但不是它们的返回类型。
答案 1 :(得分:7)
你只需要一个可用于读写的重载:
T& operator[](int);
话虽如此,您可能还希望const
重载:
const T& operator[](int) const;
这将为您班级的const
个实例提供只读索引。
答案 2 :(得分:2)
您收到错误,因为重载的函数不能仅仅因返回类型而有所不同。但它们可以因常数而不同。
/**
* Write index operator.
*/
T& operator[](T u);
/**
* Read index operator
*/
const T& operator[](T u) const;
注意“写”和“读”交换位置。
另外,难道你不是指操作符的参数是某种整数类型吗?