基于auto的范围传递的参数

NPS*_*NPS 3 c++ for-loop c++11

vector<MyClass> objects;
for (auto obj : objects)
{}
Run Code Online (Sandbox Code Playgroud)

obj是每个对象的副本还是参考?

Die*_*ühl 10

你写的方式会得到每个元素的副本.要获得副本,请使用

for (auto&& obj: object) {
}
Run Code Online (Sandbox Code Playgroud)

您还可以使用其他一个明显的变体:

  1. 仍然使用推断的类型,但明确使用引用:auto&.
  2. 明确但使用const参考:auto const&.
  3. 您实际上也可以使用类型:MyClass&MyClass const&.

  • @cdhowie:你会得到推断的类型,但它必须是一个参考.有趣的是,如果`MyClass`恰好是`bool`(或者更常见的是,如果迭代器返回一个代理),代码将无法编译. (2认同)
  • @DietmarKühl:你所说的代理失败的一个例子:http://coliru.stacked-crooked.com/a/2028ea1ae9d513a3 (2认同)