“引用&”的使用:for(auto &i:s) 和 for(auto i:s)

参考:

  1. 《C++prime》第五版
  2. for(auto &i:s)和for(auto i:s)的区别
  3. C++ auto类型说明符如for(atuo &x : s)
  4. auto关键字:for(auto &i:s)和for(auto i:s)

问题:
在这里插入图片描述
总结:

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)改变元素值。

猜你喜欢

转载自blog.csdn.net/weifengomg/article/details/128637096