Перегрузка константных и неконстантных операторов
У меня есть тема, я запутался в том, что мне нужно немного проработать. Это перегрузка оператора с помощью константной и неконстантной версий.
// non-const
double &operator[](int idx) {
if (idx < length && idx >= 0) {
return data[idx];
}
throw BoundsError();
}
Я понимаю, что эта функция часть класса, берет индекс и проверяет его логичность, возвращает индекс данных массива в классе. Также есть функция с тем же телом, но с вызовом функции
const double &operator[](int idx) const
Зачем нам две версии?
Этот типовой вопрос также может помочь уточнить. Какая версия используется в каждом случае ниже?
Array a(3);
a[0] = 2.0;
a[1] = 3.3;
a[2] = a[0] + a[1];
Моя гипотеза о том, что const версия вызывается только наa[2]
потому что мы не хотим рисковать изменениемa[0]
или жеa[1]
.
Спасибо за любую помощь.