“引用&”的使用: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)改变元素值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值