[引用折叠 - 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; ```