引用折叠原则和完美转发是有联系的,可以说后者是基于前者的某些特性实现的,具体来看一下。
要理解完美转发,需要了解两个知识点:
1. 引用折叠原则(Reference collapsing rules)。
2. 右值函数模版参数类型推导(Template argument deduction)
先看引用折叠。
所谓引用折叠或者崩塌(collapse)既为当引用指向引用的时候,这里的引用可以是左值也可以是右值引用,最终的类型会有部分被折叠到一起。具体规则如下(注意地址符之间的空格):
| 折叠前 | 折叠后 | 注释 |
|---|---|---|
| A& & | A& | 指向左值引用的左值引用折叠/崩塌为左值引用 |
| A& && | A& | 指向左值引用的右值引用折叠/崩塌为左值引用 |
| A&& & | A& | 指向右值引用的左值引用折叠/崩塌为左值引用 |
| A&& && | A&& | 指向右值引用的右值引用折叠/崩塌为右值引用 |
以上原则可以概括为:凡是右左值引用参与的情况下,最终的类型都会变为左值引用,只有全部为右值引用的情况下才会变为右值引用。
再看函数模板参数类型推导
注:关于模板参

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

被折叠的 条评论
为什么被折叠?



