微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C std :: forward vs static_cast

据我所知,std :: forward< T>(x)等同于static_cast< T&&>(x).

但是从我看到的情况来看,static_cast< T>(x)似乎做了同样的事情,如下面的code所示

我的问题是为什么std :: forward< T>实现为static_cast< T&&>(x),而不是static_cast< T>(x),如果两者具有相同的效果

解决方法

因为完美转发允许传递r值引用和l值引用.这是通过 reference collapsing完成的:
T = int    --> T&& = int&&
T = int&   --> T&& = int& && = int&
T = int&&  --> T&& = int&& && = int&&

在您的示例中使用static_cast< T>你只是失去了r值参考.它适用于原始类型(因为传递int通常是复制cpu寄存器值),但是对于复杂类型来说很糟糕,因为它导致通过复制ctors创建临时对象.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐