[英]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.