const如何使函数重载?

Gar*_*auh 3 c++ overloading const

我用C++编写了这段代码:

class Foo
{
public:
    int& fun(){return var;}       // 1st fun
    int fun() const {return var;}  // 2rd fun
 private:
    int var;
};
int main()
{
    Foo foo;
    int i = foo.fun();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我知道C++不能通过返回值来区分重载函数,但是为什么当我向第2个函数添加const时,重载可以工作?'const'做了什么?

das*_*ght 6

编译器不能通过返回类型进行区分,因为返回值可以在执行赋值之前进行转换.另一方面,调用函数的对象是函数的参数(尽管是隐式参数),因此编译器可以对其进行区分.