繁体   English   中英

成员函数返回成员变量的右值引用

[英]Member function return rvalue reference of member variable

#include <vector>
using namespace std;

struct TempData {
    vector<int> data;
    TempData() {
        for(int i = 0; i < 100; i++) data.push_back(i);
    }
    // vector<int> GetData() { // function 1
    //  return move(data);
    // }
    vector<int>&& GetData() { // function 2
        return move(data);
    }
};

int main() {
    vector<int> v;
    {
        TempData td;
        v = td.GetData();
    }
}

function 1function 2什么区别?

function 1将使用move(data)构造一个温度vector ,然后将该温度vector分配给v

无需添加更多详细信息...

在您的小测试用例中,可能没有什么区别。 几乎可以肯定会消除多余的临时对象。 并且main中的v将保存成员变量的内容。

但在一般情况下:

版本1 肯定会使成员data处于未指定的“空”状态。 即使函数返回值被丢弃。

版本2 可能使成员处于某些未指定的空白状态,也可能没有。 例如,如果调用该函数并将其返回值丢弃,则该成员将保持不变。 这就是为什么可以说std::move本身不会移动任何东西的原因。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM