13.6.3

来源:互联网 发布:软件测试包括哪些 编辑:程序博客网 时间:2024/05/16 10:13

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 &"}

0 0