【发布时间】:2021-04-26 22:26:03
【问题描述】:
让我们考虑下面的例子(当然应该用std::accumulate代替):
#include <vector>
auto sum(std::vector<int> const& numbers) -> int
{
auto sum = 0;
for(auto /*const, const&, &&, [nothing]*/ i : numbers) { sum += i; }
return sum;
}
如您所见,有许多不同的方法可以将基于范围的 for 循环用于小类型。
请注意,所有这些变体都使用 gcc 在编译器资源管理器中编译为相同的汇编代码。
我经常看到建议在第一种情况下使用auto i,在第二种情况下使用auto const& i。
但是我们在这里与编译器而不是人类交谈。有趣的信息是变量只是输入。这不是auto i表达的。
那么在您只需要读取输入的任何情况下,使用auto const& i 而不是auto i 是否有任何性能劣势?
【问题讨论】:
-
请每个 stackoverflow.com 问题一个问题。您的一些问题确实是在征求意见,这不适合 stackoverflow.com。
标签: c++ ranged-loops