C++ - overloading [] operator

The operator[] overload will be selected based on the const-qualification of the object you call it on.

Array<> intArray;
intArray[1]; //calls T& operator[]

const Array<> constArray;
constArray[1]; //calls T operator[]

If you remove the const from T operator[], you get an error because the member functions cannot have the same const-qualification and parameters as there would be no way to select between them.


First thing, regard [] as syntactic sugar for calling this->operator[].

The const version will be called if this is a const pointer, else the non-const version will be called.

Moving on, you ought to use const T& operator [](int idx) const {, i.e. have the const version return a const reference. That will save the overhead of taking a deep copy.

Finally, the const-ness of a function is part of its signature. This allows you to overload based on const-ness. Otherwise you couldn't have the two versions of operator[].