[引用折叠 - cppreference](https://zh.cppreference.com/w/cpp/language/reference#:~:text=%E5%BC%95%E7%94%A8%E6%8A%98%E5%8F%A0)
我们知道,通过模板、typedef、using等类型操作可以声明引用的引用,或者用引用赋值给 `auto&&` 变量,比如`T& &&`,`T&& &&` 等等,**引用折叠**的作用就是**决定多重引用的最终类型**
> [!info] 核心原则只有一句话
> 右值引用的右值引用折叠成右值引用,所有其他组合均折叠成左值引用
```cpp
using lref = int&;
using rref = int&&;
lref & r1 = i;
lref && r2 = i;
rref & r3 = i;
rref && r4 = 1;
```
使用 cpp_insights 生成实例化结果可见,除了右值引用的右值引用折叠为右值引用外,其它均为左值引用
```cpp
using lref = int &;
using rref = int &&;
int & r1 = i;
int & r2 = i;
int & r3 = i;
int && r4 = 1;
```