предполагается, что в классе String есть две перегруженные функции-члены (константная версия и неконстантная версия):
char & String::operator[](int i) //Version 1
{
cout<<"char & String::operator[](int i) get invoked."<<std::endl;
return str[i];
}
const char & String::operator[](int i) const //Version 2
{
cout<<"const char & String::operator[](int i) const get invoked."<<std::endl;
return str[i];
}
и есть тестовый фрагмент кода
int main(){
String a;
cout<<a[0]<<endl; //Line 1
a[0]='A'; //Line 2
}
Как компилятор решает, какую функцию вызывать? Я обнаружил, что версия 1 всегда вызывается, когда я запускаю программу. Может ли кто-нибудь сказать мне, почему это так? И как может вызваться Версия 2?