考虑以下代码。
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()”。 为什么会出现这样的情况?
最佳答案
For "const int& tmp2 = myClass1.get();" I expected that it will print call "const int& get() const" in MyClass1.
你没有解释为什么你会这样期望,但你当然不应该这样做。有两个 get
函数不带参数,一个 const
,另一个不带参数。由于 myClass1
不是 const
,因此调用不是 const
的函数。
如果不是这样,就没有必要允许两个具有相同名称并采用相同参数的类成员函数,只是一个是 const
而另一个不是。 t。
关于c++ - C++ 函数重载中的意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41492009/