当前位置: 首页 > news >正文

范围for 和 万能引用

万能引用(Universal Reference)

条件

  • T&& 中的 T 需要被模板参数推导(即 T 是模板类型参数或 auto)。

  • 形式

    • 在 函数模板参数 中:template <typename T> void foo(T&& arg)

    • 在 auto&& 声明中:auto&& x = ...

特点

  • 可以绑定到 左值或右值

  • 通常用于 完美转发(std::forward

范围for

for (auto x : container) {//这里X是容器的元素// 循环体
}上面会被替换成下面
{auto&& __range = container;          // 获取容器引用auto __begin = __range.begin();      // 获取起始迭代器auto __end = __range.end();          // 获取结束迭代器for (; __begin != __end; ++__begin) { // 遍历auto x = *__begin;               // 解引用获取当前元素// 循环体}
}如果是 左值容器(如变量),推导为 左值引用(Container&),避免拷贝。如果是 右值容器(如临时对象),推导为 右值引用(Container&&),延长临时对象生命周期至循环结束。也就是说,范围for的条件是
1.容器必须提供 begin() 和 end() 方法,返回迭代器2.定义迭代器类,并实现:operator*(解引用)operator++(递增)operator!=(比较)如果容器是数组,那迭代器其实就是指针
1.__begin 和 __end 就是指针,因为数组名在大多数情况下会退化为首元素指针。2.指针本身支持 *(解引用)、++(移动到下一个元素)、!=(比较地址),因此完全符合迭代器的要求。X使用引用类型
for (auto& x : container) {// 循环体
}{auto&& __range = container;          // 获取容器引用auto __begin = __range.begin();      // 获取起始迭代器auto __end = __range.end();          // 获取结束迭代器for (; __begin != __end; ++__begin) { // 遍历auto& x = *__begin;               // 解引用获取当前元素// 循环体}
}auto默认是丢弃引用的,如果返回的容器的元素需要引用类型的话,要在for里使用auto&

http://www.xdnf.cn/news/249805.html

相关文章:

  • 【业务领域】电脑网卡是主板还是cpu(主板的网卡是什么意思)
  • 神经网络入门
  • 题解:CF1133E K Balanced Teams
  • 专题二十一:无线局域网——WLAN
  • VAO与VBO的相关操作
  • 【软件技能】Verdi使用技巧总结
  • TactileNet 利用 AI 生成触觉图形填补视障人士无障碍鸿沟
  • 文章记单词 | 第56篇(六级)
  • 【信息系统项目管理师-论文真题】2024上半年(第二批)论文详解(包括解题思路和写作要点)
  • 交我算使用保姆教程:在计算中心利用singularity容器训练深度学习模型
  • VLM-R1 训练:max_anyres_num 参数与多图处理机制解析
  • Origin绘图操作:图中迷你图绘制
  • 【c语言】字符函数和字符串函数
  • PB的框架advgui反编译后控件无法绘制的处理(即导入pbx的操作步骤)
  • 编程题python常用技巧-持续
  • 【java WEB】恢复补充说明
  • 基于hr2管理系统的学习
  • BG开发者日志501:故事模式的思路2
  • 2025五一杯数学建模B题:矿山数据处理问题,详细问题分析,思路模型
  • 有没有贴吧备份的网站,备份贴吧网站数据的方法
  • 【c++】【STL】queue详解
  • 【业务领域】PCIE协议理解
  • 三维装配可视化界面开发笔记
  • 2024年US SCI1区TOP:自适应变异麻雀搜索算法AMSSA+地铁隧道变形预测,深度解析+性能实测
  • 小刚说C语言刷题—1602总分和平均分
  • xml 和 yaml 的区别
  • 冒泡排序:从入门到入土(不是)的奇妙旅程
  • 文章记单词 | 第55篇(六级)
  • 字节跳动社招 BSP驱动工程师
  • 猫,为什么是猫?