通常,我们在一个对象上调用成员函数,而不管该对象是一个左值还是一个右值。
我们指出this的左值/右值属性的方式与定义const成员函数相同,即,在参数列表后放置一个引用限定符。
class Foo
{
public:
Foo& operator=(const Foo&) &;// 只能向可修改的左值赋值
};
引用限定符可以是&或&&,分别指出this可以指向一个左值或右值。类似const限定符,引用限定符只能用于(非static)成员函数,且必须同时出现在函数的声明和定义中。
对于&限定的函数,我们只能将它用于左值;对于&&限定的函数,只能用于右值。
一个函数可以同时用const和引用限定。在此情况下,引用限定符必须跟随在const限定符之后。
当我们定义const成员函数时,可以定义两个版本,唯一的差别是一个版本有const限定而另一个没有。引用限定的函数则不一样。如果我们定义两个或两个以上具有相同名字和相同参数列表的成员函数时,就必须对所有函数都加上引用限定符,或者所有都不加。