• 什么是引用折叠Reference Collapsing ?

  • 引用折叠在泛型编程中非常有用,因为它确保在模板参数传递过程中正确地处理引用类型,避免不必要的复制和转移,同时保留引用语义。例如,在实现转发函数(forwarding function)时,引用折叠允许保持参数的值类别(lvalue或rvalue),从而正确地将参数转发给其他函数。

  • 注意:引用折叠只在模板类型推导(template type deduction)和类型别名(type aliasing)时发生,对于已知类型的对象和函数参数不会发生引用折叠

  • 引用折叠规则如下:记忆诀窍:凡是折叠中出现左值引用,优先将其折叠为左值引用。

    • & + & -> &
    • & + && -> &
    • && + & -> &
    • && + && -> &&
    • 左值(非引用)+&&(模板形参的)-> &
      • 原理上:编译器自己在模板形参类型前加上&,这样就等同于:&+&&,所以会折叠为&
      • 只适用于&&形参的模板函数,不适合普通函数
10-04 13:46