知识卡片
引用折叠规则
内容
引用折叠把模板等上下文生成的“引用的引用”化为单层引用:组合里有左值引用就得到左值引用,只有全为右值引用才保留右值引用。它是通用引用与 forward 保留值类别的机制,不意味着可以直接手写任意引用套引用声明。
参考来源
- 位置:《Effective Modern C++》第5章《右值引用,移动语义,完美转发》,条款二十八:理解引用折叠(源文件:_epub-src/EPUB/text/ch006.xhtml)
- 结论依据:原文列举引用折叠上下文与“有左值则左值”规则,解释转发保留值类别的机制。
- 原始内容:引用折叠发生在四种情况下:模板实例化, auto 类型推导, typedef 与别名声明的创建和使用, decltype 。 当编译器在引用折叠环境中生成了引用的引用时,结果就是单个引用。有左值引用折叠结果就是左值引用,否则就是右值引用。 通用引用就是在特定上下文的右值引用,上下文是通过类型推导区分左值还是右值,并且发生引用折叠的那些地方。