c++ - Foreach 范围迭代 vector<int> - auto 或 auto&?

标签 c++ performance c++11 foreach auto

游戏引擎微优化情况:我正在使用 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/

相关文章:

c++ - 我可以检查初始化列表中设置的构造函数主体中的变量吗?

c++11 - 是否可以在 C++11 中的一行中声明和传递一个数组?

C++ struct - 作为此参数传递 const 会丢弃限定符

javascript - 如何将 rel ="preload"用作 ="style"或 ="script"或提高页面速度的更好方法

c - glib 内存分配 VS std *alloc 和 free

database - 单独的应用程序和数据库服务器与一体机的性能

C++ STL 内存管理 : Stack or Heap?

C++ ifstream 跳过第一行

c++ - NET-SNMP 和多线程

c++ - 具有C++ 11多线程的特征库