在基于范围的循环中使用通用参考有什么好处?
What profit of universal reference usage in range based loop?
很多次我看到这样的代码:
template<typename Collection>
void Foo(Collection&& c)
{
for (auto&& i : std::forward<Collection>(c))
// do something with i
}
对于所有 STL 容器(vector<bool>
除外(,i
具有左值引用的类型。在这种情况下输入auto&&
有什么实际意义吗?
正如你所说,你没有左值的完美例子是std::vector<bool>
.使用auto&
将无法编译,因为 prvalue 是从迭代器返回的。
此外,有时我碰巧要制作没有从其迭代器返回左值的范围。
此外,使用auto&&
的好处是没有它不起作用的情况。即使你有一个奇怪的情况,你的迭代器产生一个常量右值引用,auto&&
会绑定到它。
对于教学,也更容易分辨"在你的 for 循环中使用auto&&
",因为它不会导致复制和到处工作。
那里还有一个建议允许隐式auto&&
并启用语法for (x : range)
(我不记得是哪一个。如果你知道,请在评论中告诉我(
相关文章:
- C++ 参考:这两个语句有什么区别?
- 在基于范围的循环中使用通用参考有什么好处?
- 什么是常量参考参数以及如何使用它?
- 在平等符号左侧使用RVALUE参考的规则是什么?
- 指针与参考示例,在什么情况下更好
- 从链接中缺少什么,导致未定义的参考
- const自动参考绑定到(NULL)指针 - 实际类型是什么
- 使用参考需要什么必要的更改才能传递字符串
- 函数参考funcname @number, @x是什么意思
- 传递向量作为参考的正确方法是什么
- C 运算符在参考vars上,这是做什么的
- C 11-将变量初始化为参考是什么意思
- variadic模板阵列参考参数的语法是什么?
- 有什么方法可以将指针指向参考
- VOID NTAPI是什么意思?在哪里可以找到它的参考资料
- std::function<的含义是什么;void(参考*)>在C++中
- CGAL Min_sphere_of_sphere算法的正确学术参考是什么?
- 通用参考的标准/官方名称是什么?
- 这个快速排序有什么问题,我从书中参考它
- 我的参考变量发生了什么