13.55
void push_back(string &&s) { data->push_back(std::move(s)); }
13.56
Foo Foo::sorted() const & {
Foo ret(*this);
return ret.sorted();
}
将会无限递归
因为ret是一个左值,ret.sorted() 调用的不是成员函数Foo Foo::sorted() &&,而是
Foo Foo::sorted() const &本身
13.57
Foo Foo::sorted() const & { return Foo(*this).sorted(); }
调用正确
13.58
#include <vector>
#include <iostream>
#include <algorithm>
using std::vector; using std::sort;
class Foo {
public:
Foo sorted() &&;
Foo sorted() const &;
private:
vector<int> data;
};
Foo Foo::sorted() && {
sort(data.begin(), data.end());
std::cout << "&&" << std::endl; // debug
return *this;
}
Foo Foo::sorted() const & {
// Foo ret(*this);
// sort(ret.data.begin(), ret.data.end());
// return ret;
std::cout << "const &" << std::endl; // debug
// Foo ret(*this);
// ret.sorted(); // Exercise 13.56
// return ret;
return Foo(*this).sorted(); // Exercise 13.57
}
int main()
{
Foo().sorted(); // call "&&"
Foo f;
f.sorted(); // call "const &"
}