2
請考慮以下代碼。C++函數重載中的意外行爲
class MyClass1
{
public:
MyClass1(const int& i)
{
myVar = i;
}
const int& get() const
{
std::cout<<"Inside 1 \n";
return myVar;
}
int get()
{
std::cout<<"Inside 2 \n";
return myVar;
}
private:
int myVar;
};
class MyClass2
{
public:
MyClass2(const int& i)
{
myVar = i;
}
const int& get()
{
std::cout<<"Inside 3 \n";
return myVar;
}
int get() const
{
std::cout<<"Inside 4 \n";
return myVar;
}
private:
int myVar;
};
int main(int argc, char* argv[])
{
MyClass1 myClass1(10);
int tmp1 = myClass1.get();
const int& tmp2 = myClass1.get();
MyClass2 myClass2(10);
int tmp3 = myClass2.get();
const int& tmp4 = myClass2.get();
return 0;
}
輸出顯示如下。
Inside 2
Inside 2
Inside 3
Inside 3
對於 「const int的& TMP2 = myClass1.get();」我預計它會在MyClass1中打印調用「const int & get()const」。令我驚訝的是,它在MyClass1中的兩種情況下都稱爲「int get()」。 在MyClass2中,我調換了「const」,然後我發現在函數調用中它調用了「const int & get()」。 這是怎麼發生的?
C++根據返回類型重載的唯一方法是重載轉換運算符... –
@ W.F。 - 它是一個**轉換**運算符,而不是**演員**操作符。沒有演員就可以完成轉換。 –
@PeteBecker你是對的措辭不是我的好方... –