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”的隐式类型完成的。对吗?