4
假定有兩個重載成員函數在String類(一個const版本和非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如何被調用?
順便說一句,怎麼能一個非const對象調用const函數? – JDein 2012-04-25 09:08:07