如果我有这样的类型
std::vector<int> const value = ...
哪一个是更好的解决方案?
风格1:
for(auto v : value){
//do something
}
风格2:
for(auto &&v : value){
//do something
}
风格3:
for(auto const v : value){
//do something
}
他们都保持了这种类型的稳定性。
样式2是最通用的解决方案。
据我所知,对于int、double等原语类型,如果我们知道向量的类型是本原类型,则按值传递比传递更好。因此,如果我们知道向量的类型是本原类型,那么我认为样式1和样式3比样式2更好。如果这个问题听起来很蠢,请原谅我。
发布于 2016-10-19 03:51:08
这取决于您的需求和您正在迭代的内容。
样式1和3复制元素。这意味着您不能更改原始容器。对于小类型而言,它可能在性能方面是有益的(在目标体系结构上对自己进行基准测试),但通常只是一个糟糕的默认设置。
然后,在默认情况下,您必须决定是否属于const。如果是,就选择3种风格。
风格2确实是最通用的,但不一定是好的方式。除非您想进一步从元素中移开,否则对当场生成的序列进行非const引用几乎没有意义,即:
for(auto&& x : std::vector<int>{1,2,3})
{
// x = 42; ???
}
如果您查看C++核心准则这里和这里,您将不会看到auto&&
的示例,它们建议默认使用const&
,除非您要修改变量。这就是我要坚持的。
https://stackoverflow.com/questions/40121664
复制相似问题