3
#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 1和 和有什么不一样function 2

function 1构造一个 temp vectormove(data)然后将 temp 分配vectorv?

没有更多的细节要添加...

4

1 回答 1

5

在您的小测试用例中,可能没有区别。额外的临时对象几乎肯定会被忽略。vin main 将保存成员变量的内容。

但在一般情况下:

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

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

于 2017-12-11T16:50:38.977 回答