C++: Overloading the [ ] operator for read and write access

c++, c++11, operator-overloading, operators

Solution

Your mutable version is fine:

T& operator[](T u);

but the `const` version should be a `const` member function as well as returning a `const` reference:

const T& operator[](T u) const;
                         ^^^^^

This not only distinguishes it from the other overload, but also allows (read-only) access to `const` instances of your class. In general, overloaded member functions can be distinguished by their parameter types and const/volatile qualifications, but not by their return types.

Problem

In general, how do you declare the index `[ ]` operator of a class for both read and write accesss? I tried something like ``` /** * Read index operator. */ T& operator[](T u); /** * Write index operator */ const T& operator[](T u); ``` which gives me the error ``` ../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)' ```

Original source