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
引用的东西(至少我没有找到任何直接的建议):
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
?
发布于 2018-03-20 09:07:15
如果你不想更改项目以及想要避免复印,那么auto const &
是正确的选择:
for (auto const &x : vec)
谁建议你使用auto &
是错误的。别理他们。
这里回顾一下:
auto x
何时处理副本。auto &x
何时想使用原始项目并可以修改它们。auto const &x
何时处理原始项目并且不会修改它们。发布于 2018-03-20 09:31:18
如果你有一个std::vector<int>
or std::vector<double>
,那么使用auto
(使用值拷贝)而不是const auto&
,因为复制一个int
或一个double
便宜:
for (auto x : vec)
....
但是,如果你有一个std::vector<MyClass>
,那里MyClass
有一些非平凡的复制语义(例如std::string
,一些复杂的自定义类等),那么我建议使用const auto&
以避免深层复制:
for (const auto & x : vec)
....
https://stackoverflow.com/questions/-100007681
复制相似问题