繁体   English   中英

右值参考限定符是否应返回右值参考?

[英]Should rvalue reference qualifier return rvalue reference?

我正在调查从rvalue ref-qualifier函数返回rvalue引用是否真的是个好主意。 可以说我们有:

class DataPack {
 public:
  std::vector<int> data;

  DataPack(std::initializer_list<int> d) : data{d} {}

  std::vector<int>& get_data() & {
    return data;
  }
  std::vector<int>&& get_data() && {
    return std::move(data);
  }
  // This version fixes for-loop problem (see below)
  //std::vector<int> get_data() && {
  //  return data;
  //}
};

然后,如果我想获取数据而不进行临时设置,可以使用以下命令:

auto my_data = DataPack{1,2,3}.get_data();

但假设我要使用以下代码:

for (auto v : DataPack{1,2,3}.get_data()) {
  std::cout << v << ", ";
}

现在是UB,因为get_data()返回对临时语句的引用,该语句在完整语句后被销毁。

也许对于这样的for循环可以通过某种方式解决? 还是我们应该按价值回报并希望RVO能够按预期工作? 因为上面的原因在我看来不是很安全。

std::vector<int>&& get_data() && {
   return std::move(data);
}

这应该返回一个std::vector<int> ,这没有问题。

暂无
暂无

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

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