C++primer练习13.55-58

练习13.55

为你的StrBlob添加一个右值引用版本的Push_back

void StrBlob::push_back(string&&s){data->push_back(std::move(s));}

练习13.56

如果sorted定义如下,会发生什么

Foo Foo::sorted()const &{

Foo ret(*this);

return ret.sorted();

}

::无限递归

练习13.57

如果sorted定义如下,会发生什么?

Foo Foo::sorted()const &{return Foo(*this).sorted();}

::会调用右值版本,进行排序

练习13.58

编写新版本的Foo类,其sorted函数中有打印语句,测试这个类,证明你的答案

#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
class Foo {
public:
    Foo sorted()&&;
    Foo sorted() const&;

private:
    vector<int> data;
};

Foo Foo::sorted()&&
{
    sort(data.begin(), data.end());
    cout << "&&" <<endl; 
    return *this;
}

Foo Foo::sorted() const&
{

    cout << "const &" << std::endl;     
    return Foo(*this).sorted(); 
}

int main()
{
    Foo().sorted(); 
    Foo f;
    f.sorted(); 
}

 

posted @ 2022-08-16 21:10  yddl  阅读(16)  评论(0编辑  收藏  举报