Sobrecarga do Operador Const e Não Const
Eu tenho um tópico que eu estou confuso sobre o que eu preciso de alguma elaboração. É a sobrecarga do operador com uma versão const e uma versão não-const.
// non-const
double &operator[](int idx) {
if (idx < length && idx >= 0) {
return data[idx];
}
throw BoundsError();
}
Eu entendo que esta função faz parte de uma classe, pega um índice e verifica se sua lógica, retorna o índice dos dados da matriz na classe. Há também uma função com o mesmo corpo, mas com a chamada de função como
const double &operator[](int idx) const
Por que precisamos de duas versões?
Essa questão de amostra também pode ajudar a elaborar. Qual versão é usada em cada instância abaixo?
Array a(3);
a[0] = 2.0;
a[1] = 3.3;
a[2] = a[0] + a[1];
Minha hipótese de que a versão const só é chamadaa[2]
porque não queremos nos arriscar a modificara[0]
oua[1]
.
Obrigado por qualquer ajuda.