-
什么是引用折叠Reference Collapsing ?
-
引用折叠在泛型编程中非常有用,因为它确保在模板参数传递过程中正确地处理引用类型,避免不必要的复制和转移,同时保留引用语义。例如,在实现转发函数(forwarding function)时,引用折叠允许保持参数的值类别(lvalue或rvalue),从而正确地将参数转发给其他函数。
-
注意:引用折叠只在模板类型推导(template type deduction)和类型别名(type aliasing)时发生,对于已知类型的对象和函数参数不会发生引用折叠
-
引用折叠规则如下:记忆诀窍:凡是折叠中出现左值引用,优先将其折叠为左值引用。
- & + & -> &
- & + && -> &
- && + & -> &
- && + && -> &&
- 左值(非引用)+&&(模板形参的)-> &
- 原理上:编译器自己在模板形参类型前加上&,这样就等同于:&+&&,所以会折叠为&
- 只适用于&&形参的模板函数,不适合普通函数