C++ 用常量解析函数重载
想想这个C++ 用常量解析函数重载,c++,C++,想想这个 #include <iostream> class A { public: void fun(int x) const { std::cout<<"int x"<<std::endl; } void fun(const int x) { std::cout<<"const int x"<<std::endl; } void fun(int &x) { std::
#include <iostream>
class A
{
public:
void fun(int x) const
{
std::cout<<"int x"<<std::endl;
}
void fun(const int x)
{
std::cout<<"const int x"<<std::endl;
}
void fun(int &x)
{
std::cout<<"int &x"<<std::endl;
}
void fun(const int &x)
{
std::cout<<"const int &x"<<std::endl;
}
};
int main()
{
A obj;
int a = 10;
const int b = 10;
int& ref = a;
const int& ref1 = b;
obj.fun(a);
obj.fun(b);
obj.fun(ref);
obj.fun(ref1);
return 0;
}
#包括
甲级
{
公众:
虚空乐趣(整数x)常数
{
std::cout在声明中忽略顶级常量,因此fun(const int x)
与fun(int x)
相同
当然,它会与ref版本冲突,几乎没有任何意义。如果您搜索右值,则添加fun(int&&x)
,尽管它通常用于用户定义的类型
()后面的常量限定了对象实例——this指针。选择何时使用const A obj
这就是你要问的吗?谢谢,它在一定程度上回答了第一点。但是有什么通用规则吗?例如,如果我们从fun(int x)const中删除const,那么它与fun(const int&)之间就不明确了否则,与顶级的const
限定符无关。剩下的问题是为什么fun(int x)const与fun(const int&x)不模糊,而fun(int x) is@AbhishekDixit由const限定的函数也可以从non-const对象调用。我假设在这种情况下首选non-const版本,重载解析是基于“this”的隐式类型完成的。对吗?