У меня есть класс шаблона массив:C++ - перегрузки оператор []
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)
называется. Зачем?
Заранее спасибо.
На стороне примечания, предпочитайте правильные конструкторы для функций типа 'initialize'. C++ дает вам идеальный инструмент для инициализации объектов, и он называется конструктором. – SergeyA