首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >哪一种更好,汽车&&,汽车还是汽车

哪一种更好,汽车&&,汽车还是汽车
EN

Stack Overflow用户
提问于 2016-10-19 03:33:42
回答 1查看 2.2K关注 0票数 3

如果我有这样的类型

代码语言:javascript
运行
复制
std::vector<int> const value = ...

哪一个是更好的解决方案?

风格1:

代码语言:javascript
运行
复制
for(auto v : value){
  //do something
}

风格2:

代码语言:javascript
运行
复制
for(auto &&v : value){
  //do something
}

风格3:

代码语言:javascript
运行
复制
for(auto const v : value){
  //do something
}

他们都保持了这种类型的稳定性。

样式2是最通用的解决方案。

据我所知,对于int、double等原语类型,如果我们知道向量的类型是本原类型,则按值传递比传递更好。因此,如果我们知道向量的类型是本原类型,那么我认为样式1和样式3比样式2更好。如果这个问题听起来很蠢,请原谅我。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-19 03:51:08

这取决于您的需求和您正在迭代的内容。

样式1和3复制元素。这意味着您不能更改原始容器。对于小类型而言,它可能在性能方面是有益的(在目标体系结构上对自己进行基准测试),但通常只是一个糟糕的默认设置。

然后,在默认情况下,您必须决定是否属于const。如果是,就选择3种风格。

风格2确实是最通用的,但不一定是好的方式。除非您想进一步从元素中移开,否则对当场生成的序列进行非const引用几乎没有意义,即:

代码语言:javascript
运行
复制
for(auto&& x : std::vector<int>{1,2,3})
{
    // x = 42; ???
}

如果您查看C++核心准则这里这里,您将不会看到auto&&的示例,它们建议默认使用const&,除非您要修改变量。这就是我要坚持的。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40121664

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档