Mik*_*aft 7 c++ perfect-forwarding c++11
据我所知,std::forward<T>(x)相当于static_cast<T&&>(x).
但是从我所看到的,static_cast<T>(x)似乎做同样的事情,如下面的代码所示
我的问题是为什么不出std::forward<T>被实现为static_cast<T&&>(x),而不是static_cast<T>(x),如果两者都具有相同的效果?
mya*_*aut 12
因为完美转发允许传递r值引用和l值引用.这是通过参考折叠完成的:
T = int --> T&& = int&&
T = int& --> T&& = int& && = int&
T = int&& --> T&& = int&& && = int&&
Run Code Online (Sandbox Code Playgroud)
在你的例子中,static_cast<T>你只是丢失了r值引用.它适用于原始类型(因为传递int通常是复制CPU寄存器值),但对复杂类型来说很糟糕,因为它导致通过复制ctors创建临时对象.
| 归档时间: |
|
| 查看次数: |
993 次 |
| 最近记录: |