左值和右值的成员函数


一个对象是左值还是右值会影响其成员函数的调用,在参数后边放置一个引用限定符来修饰:&表示该对象是左值,&&表示该对象是右值。

class Foo{
public:
    Foo sorted() &&;	//右值对象可以调用
    Foo sroted() const &; //任何对象都可以
private:
    vector 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;
}

同名同参数的成员函数,要么都加引用限定符,要么都不加。

相关