左值和右值的成员函数
一个对象是左值还是右值会影响其成员函数的调用,在参数后边放置一个引用限定符来修饰:&表示该对象是左值,&&表示该对象是右值。
class Foo{
public:
Foo sorted() &&; //右值对象可以调用
Foo sroted() const &; //任何对象都可以
private:
vector<int> data;
};
Foo Foo::sorted() &&
{
//右值本身不属于任何用户,可以改变自身
sort(data.begin(), data.end());
return *this;
}
Foo Foo::sorted() const &
{
//由于是const成员函数,不能改变对象的内容,必须拷贝一份。
Foo ret(*this);
sort(ret.begin(), ret.end());
return ret;
}
同名同参数的成员函数,要么都加引用限定符,要么都不加。