C++11 reference collapsing and perfect forward (引用折叠以及完美转发)

本文介绍了C++11中的引用折叠原则和完美转发的概念,详细解析了引用折叠的规则以及在函数模板参数类型推导中的应用。通过实例展示了如何在不同情况下实现左值和右值引用的完美转发,从而确保类型正确无损地传递。
摘要由CSDN通过智能技术生成

引用折叠原则和完美转发是有联系的,可以说后者是基于前者的某些特性实现的,具体来看一下。
要理解完美转发,需要了解两个知识点:
1. 引用折叠原则(Reference collapsing rules)。
2. 右值函数模版参数类型推导(Template argument deduction)

先看引用折叠。

所谓引用折叠或者崩塌(collapse)既为当引用指向引用的时候,这里的引用可以是左值也可以是右值引用,最终的类型会有部分被折叠到一起。具体规则如下(注意地址符之间的空格):

折叠前 折叠后 注释
A& & A& 指向左值引用的左值引用折叠/崩塌为左值引用
A& && A& 指向左值引用的右值引用折叠/崩塌为左值引用
A&& & A& 指向右值引用的左值引用折叠/崩塌为左值引用
A&& && A&& 指向右值引用的右值引用折叠/崩塌为右值引用

以上原则可以概括为:凡是右左值引用参与的情况下,最终的类型都会变为左值引用,只有全部为右值引用的情况下才会变为右值引用。

再看函数模板参数类型推导

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值