【发布时间】:2013-06-06 14:29:30
【问题描述】:
在 C++11 中,我可以像这样迭代一些容器:
for(auto i : vec){
std::cout << i << std::endl;
}
但我知道这是不必要的 - 不必要,因为我只需要打印 vec 的值 - 复制 (EDIT:vec 的每个元素,所以我可以这样做:
for(auto &i : vec){
std::cout << i << std::endl;
}
但我想确保 vec 的值永远不会被修改并遵守 const-correctness,所以我可以这样做:
for(const auto &i : vec){
std::cout << i << std::endl;
}
所以我的问题是:如果我只需要查看某个容器的值,那么最后一个循环 (const auto &i) 是否总是首选,因为 not有一个额外的 (EDIT: each element of) vec?
我正在开发一个程序,我正在考虑在整个程序中进行此更改,因为效率在其中至关重要(我首先使用 C++ 的原因)。
【问题讨论】:
-
是的,如果您只需要对某个参数进行读取访问,则应该通过
auto const&来避免不必要的复制。 -
“const”关键字并没有让你的代码变得更快……
-
for (auto i : vec)不会复制整个vec,而是将vec的每个元素 复制到i。 -
@Casey 我明白了。所以在每次新的迭代中,之前的副本都会被删除,对吧?
-
@user2052561 - 未删除,但已销毁。