阅读一些基于范围的循环示例,他们提出了两种主要方式1 , 2 , 3 , 4
std::vector<MyClass> vec; for (auto &x : vec) { // x is a reference to an item of vec // We can change vec's items by changing x }
或者
for (auto x : vec) { // Value of x is copied from an item of vec // We can not change vec's items by changing x }
好。
当我们不需要更改vec项目时,IMO,示例建议使用第二个版本(按值)。为什么他们不建议const参考的东西(至少我没有找到任何直接的建议):
vec
const
for (auto const &x : vec) // <-- see const keyword { // x is a reference to an const item of vec // We can not change vec's items by changing x }
不是更好吗?它不是避免在每次迭代中出现冗余副本const吗?
如果您不想更改项目并且想要 避免 复制,那么auto const &是正确的选择:
auto const &
for (auto const &x : vec)
谁建议你使用auto &都是错误的。别理他们。
auto &
这是回顾:
auto x
auto &x
auto const &x