首页 > 后端开发 > C++ > C 11参考折叠规则如何实现完美转发?

C 11参考折叠规则如何实现完美转发?

Linda Hamilton
发布: 2024-12-26 22:27:13
原创
457 人浏览过

How Do C  11 Reference Collapsing Rules Enable Perfect Forwarding?

C 11 中引用折叠规则的作用

引用折叠规则在 C 11 中实现完美转发中发挥着至关重要的作用。完美转发允许通过值、左值引用或右值无缝接受和传递参数的函数

参考折叠规则

C 11 的参考折叠规则为:

  • A& & & -> A&
  • A& & & -> A&
  • A& & & -> A&
  • A& & & & & -> A& &

引用折叠的基本原理

这些规则确保,无论参数如何传递(通过左值、右值或右值引用),它总是被接收函数“视为”完美所需的类型

  • 至左值引用: 当通过左值引用(例如 T&)传递左值时,折叠规则将“& & &”转换为“&”,提供正确的左值引用,用于绑定到接收者的非常量左值引用。
  • To Const左值引用: 当通过 const 左值引用(例如 const T&)传递 const 左值时,折叠规则可确保保留常量性,并将参数绑定到接收器中正确的 const 左值引用。
  • 到右值引用:传递右值引用(例如,T&&),无论传入值如何类型,导致折叠为“& &”,这允许完美转发 xvalues(临时对象)和纯右值(T& & 类型的函数返回值)。

C 11 中的利用STL 实用函数

STL 实用函数,例如 std::move() 和 std::forward() 利用参考在内部折叠以方便完美转发。例如:

template<class T>
void Fwd(T & &v) {
  Call(std::forward<T>(v));
}
登录后复制

std::forward>>将左值引用的“& &”折叠为“&”,将右值引用的“& &”折叠为“& &”,使 Call 能够以适当的格式接收其参数。

与 std 的关系: :remove_reference

像 std::remove_reference 这样的实用程序可用于从类型推导中删除引用(例如, std::remove_reference 返回 T)。但是,它并不能取代 C 11 中对引用折叠规则的需要。 std::remove_reference 只是删除引用层,而引用折叠可确保以正确的格式接收转发的参数以实现完美转发。

以上是C 11参考折叠规则如何实现完美转发?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板