参考:
问题:
总结:
for(auto i:s) | 会拷贝一份s中的元素,而不会改变s中元素; |
特例: | 使用 for(auto x:vector) 时得到一个proxy class,操作时会改变vector
<
b
o
o
l
>
<bool>
<bool>本身元素。 应该用:for(bool x:vector < b o o l > <bool> <bool>) |
for(auto &i:s): | s中的元素的别名,可修改元素值; |
特例: | 当vector
<
b
o
o
l
>
<bool>
<bool>返回临时对象,使用auto&会编译错误,临时对象不能绑在non-const l-value reference (左值引用) 需使用:auto&&,初始化右值时也可捕获(右值引用) |
for(const auto& i:s) | 想要只读元素; |
对比: | |
访问容器 | for(auto i:s)与for(auto &i:s)作用类似 |
访问的同时进行改变其值 | for(auto &i:s) 或者选用迭代器 |
只读元素 | for(const auto& i:s) 不会像for(auto i:s)一样产生拷贝开销,也不会像for(auto &i:s)改变元素值。 |