我看到的唯一好处是,当序列迭代器返回代理引用时,您需要以非常量方式对该引用进行操作。例如考虑:
#include <vector>
int main()
{
std::vector<bool> v(10);
for (auto& e : v)
e = true;
}
这不会编译,因为vector<bool>::reference
从返回的右值iterator
不会绑定到非常量左值引用。但这将起作用:
#include <vector>
int main()
{
std::vector<bool> v(10);
for (auto&& e : v)
e = true;
}
话虽如此,除非您知道需要满足这种用例,否则我不会以这种方式编写代码。也就是说,我不会无缘无故地这样做,因为它确实会使人们想知道您在做什么。如果我确实这样做了,那么就为什么添加评论是没有害处的:
#include <vector>
int main()
{
std::vector<bool> v(10);
// using auto&& so that I can handle the rvalue reference
// returned for the vector<bool> case
for (auto&& e : v)
e = true;
}
编辑
我的最后一个案例确实应该是一个有意义的模板。如果您知道循环始终在处理代理引用,则效果auto
会和一样好auto&&
。但是,当循环有时处理非代理引用,有时处理代理引用时,我认为auto&&
它将成为首选解决方案。