C ++ - оператор перегрузки []
У меня есть шаблон класса Array:
template <class T=int, int SIZE=10>
class Array {
T TheArray[SIZE];
public:
void Initialize() {
for (int idx=0; idx < SIZE; idx++) {
TheArray[idx] = T();
}
}
T& operator [](int idx) {
return TheArray[idx];
}
T operator [](int idx) const {
return TheArray[idx];
}
}
У меня есть несколько вопросов по оператору[]
перегрузка (я нашел этот пример в сети).
Я это понимаюT& operator [](int idx)
возвращает ссылку на значение массива с индексомidx
и этоT operator [](int idx) const
возвращает свое значение. Тем не менее, я не уверен, в каком случае ссылка или значение будет возвращено с помощью[]
оператор.
Кроме того, если я изменюT operator [](int idx) const
->T operator [](int idx)
Компилятор жалуется. Это почему? Я могу понять, что компилятор жалуется, потому что отличается только тип возвращаемого значения, но почему он не жалуется, когдаconst
добавлен? Это означает только то, что не внутренние классы изменены, верно?
Я попытался отладить эту маленькую основную реализацию:
int main() {
int val;
Array<> intArray;
intArray.Initialize();
val = intArray[1];
printf("%d", intArray[1]);
intArray[1] = 5;
}
И каждый разT& operator [](int idx)
называется. Зачем?
Заранее спасибо.