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你是对的措辞不是我的好方... –