当前位置: 首页 > 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.dtcms.com/a/167455.html

相关文章:

  • 8.进程概念(四)
  • 【java WEB】恢复补充说明
  • 权限提升—Linux提权内核溢出漏洞辅助项目
  • 《AIStarter安装部署全攻略:AI绘画/数字人项目快速上手指南(含Windows环境配置要点)》
  • python库文件查找详解
  • (33)VTK C++开发示例 ---图片转3D
  • 系统思考:企业效率提升关键
  • TensorRt10学习第一章
  • 数据结构-树(二叉树、红黑、B、B+等)
  • Sentry 异常捕获
  • 【数据分享】2020年中国高精度森林覆盖数据集(免费获取)
  • QMK机械键盘固件开发指南:从源码到实践
  • ffmpeg 元数据
  • Python 常用内置函数详解(七):dir()函数——获取当前本地作用域中的名称列表或对象的有效属性列表
  • stm32数码管显示数字/循环
  • 【Redis】Another Redis Desktop Manager 安装指南
  • podman/docker国内可用的docker镜像源(2025-05)
  • Linux btop 使用教程
  • Wireshark抓取SMTP协议报文
  • 如何提升自我执行力?
  • Linux51 安装baidunetdisk yum install rpm -ivh
  • 中科院:通过内部表示优化LLM上下文利用
  • 图解 Git 工作流:理解 Rebase、Merge 与 Pull Request 的区别
  • 21 课时精通生成式 AI:微软官方入门指南详解
  • 【设计模式】GoF设计模式之备忘录模式(Memento Pattern)
  • LTspice
  • 【软件设计师:复习】上午题核心知识点总结(二)
  • 大模型蒸馏技术
  • 【业务领域】电脑主板芯片电路结构
  • (持续更新)Ubuntu搭建LNMP(Linux + Nginx + MySQL + PHP)环境