C ++:重载[]运算符以进行读写访问

时间:2012-12-03 15:56:17

标签: c++ c++11 operators operator-overloading

通常,如何为读取和写入访问声明类的索引[ ]运算符?

我试过像

这样的东西
/**
 * 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)'

3 个答案:

答案 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;

注意“写”和“读”交换位置。

另外,难道你不是指操作符的参数是某种整数类型吗?