假设 String 类中有两个重载的成员函数(一个 const 版本和一个非常量版本):
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 怎么会被调用?