【问题标题】:Which one is better, auto&&, auto or auto const [duplicate]哪个更好,auto&&、auto 或 auto const [重复]
【发布时间】:2017-02-28 12:28:14
【问题描述】:

如果我有这样的类型

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 等原始类型,按值传递比通过 const 引用传递更可取,所以如果我们知道向量的类型,我认为样式 1 和样式 3 比样式 2 更好原始类型。如果这个问题听起来很愚蠢,请原谅我。

【问题讨论】:

  • 以什么方式更好?
  • 对于for(auto const v : value){,您的意思是for(const auto&amp; v : value){吗?因为 const 值似乎没有多大意义。
  • 认为这里也有合理的答案:stackoverflow.com/questions/29859796/c-auto-vs-auto 它也涵盖了const auto&amp;

标签: c++ c++14


【解决方案1】:

这实际上取决于您的需求以及您正在迭代的内容。

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

然后你必须决定你是否是默认情况下的 const 人之一。如果是,请采用样式 3。


样式 2 确实是最通用的,但不一定是好的方式。除非您想进一步远离元素,否则对现场生成的序列进行非常量引用几乎没有意义,即:

for(auto&& x : std::vector<int>{1,2,3})
{
    // x = 42; ???
}

如果您查看 C++ 核心指南 herehere,您将看不到 auto&amp;&amp; 的示例,他们建议默认使用 const&amp;,除非您要修改变量。这就是我要坚持的。

【讨论】:

    猜你喜欢
    • 2021-09-23
    • 2012-05-29
    • 2016-08-02
    • 1970-01-01
    • 2016-11-14
    • 1970-01-01
    • 1970-01-01
    • 2018-08-15
    相关资源
    最近更新 更多