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

cls*_*udt 5 c++ operator-overloading operators c++11

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

我试过类似的东西

/**
 * Read index operator.
 */
T& operator[](T u);

/**
 * Write index operator
 */
const T& operator[](T u);
Run Code Online (Sandbox Code Playgroud)

这给了我错误

../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)'
Run Code Online (Sandbox Code Playgroud)

Mik*_*our 14

你的可变版本很好:

T& operator[](T u);
Run Code Online (Sandbox Code Playgroud)

const版本应该是const成员函数以及返回const引用:

const T& operator[](T u) const;
                         ^^^^^
Run Code Online (Sandbox Code Playgroud)

这不仅可以将其与其他重载区分开来,还允许(只读)访问const类的实例.通常,重载的成员函数可以通过它们的参数类型和const/volatile资格来区分,但不能通过它们的返回类型来区分.


NPE*_*NPE 7

您只需要一个可用于读取和写入的重载:

T& operator[](int);
Run Code Online (Sandbox Code Playgroud)

话虽如此,您可能还想要const过载:

const T& operator[](int) const;
Run Code Online (Sandbox Code Playgroud)

这将为const您的类的实例提供只读索引.