C std :: forward vs static_cast

前端之家收集整理的这篇文章主要介绍了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创建临时对象.

猜你在找的C&C++相关文章