#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()
函数,?
函数后面的
const &
并不是说只有左值可以调用。而是说一个可以被绑定到const &
引用的值可以调用。而右值同样可以绑定到const &
。但是右值不能绑定到
&
上(没有const
)。所以如果最后不是const &
而是&
的话,编译就会出错了。