предполага се, че има две претоварени членски функции (константна версия и неконстантна версия) в класа 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?