游戏引擎微优化情况:我正在使用 C++11 范围 for 循环迭代 vector<int>
, 与 auto
关键字。
什么更快:
for(auto value : ints) ...
或
for(auto& value : ints) ...
?
最佳答案
在关心哪个更快之前,你应该关心哪个在语义上是正确的。如果你不需要改变被迭代的元素,你应该选择第一个版本。否则,您应该选择第二个版本。
当然,您可能会反对,即使您不需要更改 vector 的内容,仍然可以选择使用对 const
的引用:
for(auto const& value : ints)
然后问题就变成了:哪个更快?通过引用 const
还是通过值?
好吧,你应该首先考虑上面的语义是否完全正确,这取决于你在 for
循环中做了什么:
int i = 0;
for (auto const& x : v) // Is this correct? Depends! (see the loop body)
{
v[i] = 42 + (++i);
std::cout << x;
}
这就是说,对于基本类型,只要语义正确,我就会使用 for (auto i : x)
。
我不希望性能变得更差(相反,我希望它会更好),但一如既往,在性能方面,支持您的假设的唯一有意义的方法是测量、测量和测量。
关于c++ - Foreach 范围迭代 vector<int> - auto 或 auto&?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16524057/