引用限定符(&)修饰的成员函数的问题?

#include <iostream>
#include <utility>
using namespace std;

class A{
public:
    void fun() const & { cout<<"fun()"<<endl; }
};

int main()
{
    A a;
    std::move(a).fun();
    
    return 0;
}

程序输出:

fun()

问下, 我在 A::fun() 后面已经定义了左值才能调用的符号 & ,为什么返回右值的 std::move(a) 还能调用 fun() 函数,?

阅读 1.7k
1 个回答
我在 A::fun() 后面已经定义了左值才能调用的符号 &

函数后面的 const & 并不是说只有左值可以调用。而是说一个可以被绑定到 const & 引用的值可以调用。而右值同样可以绑定到 const &

但是右值不能绑定到 & 上(没有 const )。所以如果最后不是 const & 而是 & 的话,编译就会出错了。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题