Перегрузка operator[]
будет выбрана на основе const
-вычисления объекта, который вы вызываете.
Array<> intArray;
intArray[1]; //calls T& operator[]
const Array<> constArray;
constArray[1]; //calls T operator[]
Если вы удалите const
из T operator[]
, вы получим ошибку, потому что функции-члены не могут иметь одинаковые const
-qualification и параметры, поскольку между ними не будет выбора.