13.55 右值引用版本的push_back:
void push_back(string &&s) { data->push_back(std::move(s)); }
13.56 sorted先拷贝了一个副本ret,再对ret调用sorted(),但ret是左值,仍然调用左值版本的sorted,即递归调用自身,导致死循环。
13.57 Foo(*this)是一个右值,Foo(*this).sorted()会调用右值版本的sorted(),正确。
13.58 可以看到f是左值,执行左值版本,最终会调用右值版本。
#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;
class Foo {
public:
Foo sorted() &&;
Foo sorted() const &;
private:
vector<int> data;
};
Foo Foo::sorted() &&
{
cout << "右值引用版本" << endl;
sort(data.begin(), data.end());
return *this;
}
Foo Foo::sorted() const &
{
cout << "左值引用版本" << endl;
return Foo(*this).sorted();
}
int main()
{
Foo f;
f.sorted();
return 0;
}