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

太原网站建设优化有什么ae做动图的网站

太原网站建设优化,有什么ae做动图的网站,服装效果图网站,代理公司注册需要注意什么在 C 中,引用折叠(Reference Collapsing) 是一组用于处理多重引用(如 T& & 或 T&& &&)的规则,主要出现在模板参数推导、auto 类型推导和 decltype 的上下文中。它是实现**通用引用…

在 C++ 中,引用折叠(Reference Collapsing) 是一组用于处理多重引用(如 T& & 或 T&& &&)的规则,主要出现在模板参数推导、auto 类型推导和 decltype 的上下文中。它是实现**通用引用(Universal Reference)完美转发(Perfect Forwarding)**的关键机制。


引用折叠的规则

C++ 标准规定,当出现多重引用时,编译器会将其折叠为单一引用,规则如下:

多重引用组合折叠后的类型
T& &T&(左值引用)
T& &&T&(左值引用)
T&& &T&(左值引用)
T&& &&T&&(右值引用)

简而言之:

  • 只要存在左值引用(&),最终结果就是左值引用

  • 只有全是右值引用(&&)时,结果才是右值引用


引用折叠的应用场景

1. 模板参数推导与通用引用

在模板参数推导中,T&& 可能被推导为左值引用或右值引用,具体取决于传入的实参:

  • 如果传入左值T 被推导为 T& → T&& 折叠为 T&

  • 如果传入右值T 被推导为 T → T&& 保持为 T&&

这种 T&& 被称为通用引用(Universal Reference)

示例
template<typename T>
void func(T&& arg) { // arg 可能是左值引用或右值引用
}int main() {int x = 10;func(x);   // x 是左值 → T 推导为 int& → arg 类型为 int& && → 折叠为 int&func(20);  // 20 是右值 → T 推导为 int → arg 类型为 int&&
}

2. auto 类型推导

auto&& 的推导规则与模板参数推导类似,也会发生引用折叠:

int x = 10;
auto&& a = x;   // a 是 int&(左值引用)
auto&& b = 20;  // b 是 int&&(右值引用)

3. typedef 或 using 别名

在类型别名中,引用折叠也会生效:

template<typename T>
using Ref = T&&;int n = 10;
Ref<int&> r = n;  // Ref<int&> → int& && → 折叠为 int&

4. decltype 类型推导

decltype 的结果可能包含引用,进一步参与折叠:

int x = 10;
decltype((x)) y = x;  // (x) 是左值 → decltype((x)) 是 int&

引用折叠与完美转发

引用折叠是实现**完美转发(Perfect Forwarding)**的核心机制。通过结合 std::forward,可以将参数的值类别(左值/右值)无损地转发给其他函数。

示例
template<typename T>
void wrapper(T&& arg) {// 完美转发:保留 arg 的原始值类别(左值/右值)target(std::forward<T>(arg));
}void target(int& x) { std::cout << "左值引用\n"; }
void target(int&& x) { std::cout << "右值引用\n"; }int main() {int x = 10;wrapper(x);   // 调用 target(int&)wrapper(20);  // 调用 target(int&&)
}
  • std::forward<T>(arg) 的实现依赖于引用折叠:

    template<typename T>
    T&& forward(std::remove_reference_t<T>& t) noexcept {return static_cast<T&&>(t);  // 引用折叠在此发生
    }

引用折叠的必要性

在 C++11 引入右值引用之前,引用的引用(如 int& &)是语法错误。为了支持模板和完美转发,C++11 引入了引用折叠规则:

  • 允许在模板推导中隐式生成多重引用。

  • 通过折叠规则解决多重引用的合法性。


总结

场景规则
模板参数推导T&& 可能是左值引用或右值引用(通用引用)
auto&&类似模板推导,支持左值或右值引用
完美转发std::forward 利用引用折叠保留参数值类别
类型别名using 或 typedef 中可能触发引用折叠

引用折叠是 C++11 中实现现代模板编程的关键机制,尤其在通用引用和完美转发中扮演核心角色。理解它可以帮助你更好地掌握移动语义和高效资源管理。

http://www.dtcms.com/a/474313.html

相关文章:

  • 【全志V821_FoxPi】9-3 Linux IIC驱动SSD1306(0.96寸oled屏幕)
  • crm管理系统登录入口官网龙华网站优化
  • 基于S32DS配置S32K344的FlexCAN模块
  • typescript中的难点总结
  • PHP 字符串处理详解
  • 【JUC】线程池有哪些拒绝策略?该如何选择使用?
  • 4 随机数 从一个随机数到另外一个随机数、等概率随机
  • 机器学习17:如何有效使用自监督式学习
  • 生成对抗网络(GAN)及其变种:CycleGAN和StarGAN
  • dede网站地图html文件公司部门撤销要求转岗不同意怎么办
  • 国外购买空间的网站有哪些最优惠的网站优化
  • Linux安装JDK1.8 tomcat MariaDB(MySQL删减版)
  • 【C++】C++中的异常处理try-catch
  • 珠海专业做网站的公司交友软件
  • rclone:安装与配置
  • 第128题 最长连续序列
  • 深度学习》【项目】自然语言处理——情感分析 <上>
  • 在哪里申请网站域名免费制作表白网页
  • 外设模块学习(6)——DHT11温湿度传感器(STM32)
  • 创造网站软件icp备案查询
  • 计算机视觉——从YOLO系列演进到YOLOv12架构创新、注意力机制优化、推理实践与性能基准
  • 广州网站建设公司广州企业网站建设公司公司网站建设网站建设合同需要印花税
  • 门户网站开发需求律师网络推广
  • FSR《软件开发可行性分析报告》全面概述
  • 鸿蒙开发实战:从零构建可扩展的数据迁移机制,让数据库升级不再崩
  • java接收小程序发送的protobuf消息
  • 沧州市高速公路建设管理局网站龙岩天宫山有几个台阶
  • 闽侯做网站做国际物流需要哪些网站
  • 【Swift】LeetCode 49. 字母异位词分组
  • 对网站建设建议外加工活怎么直接找厂家接单