1

考虑这个

#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;
}
  1. 编译这个会产生歧义,但没有一个人说它是由于 fun(const int x) 但删除它会使代码正确编译

  2. 当我们在重载决议时创建一个参数 const ex-fun(const int& x) 和一个函数本身 const ex - fun(int x) const 有什么区别

尝试各种组合还有一些疑问,因此欢迎任何解释 const 而重载解析的作用的通用答案

4

1 回答 1

2

顶级 const 在声明中被忽略,因此fun(const int x)fun(int x).

当然它会与 ref 版本冲突,几乎没有任何意义。如果您寻找 rvalues add fun(int &&x),尽管它通常与用户定义的类型一起使用

() 之后的 const 限定了对象实例—— this 指针。在您使用时选择const A obj

于 2013-06-11T10:36:07.833 回答