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)' ```