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创建临时对象.

相关文章

首先GDB是类unix系统下一个优秀的调试工具, 当然作为debug代...
1. C语言定义1个数组的时候, 必须同时指定它的长度.例如:int...
C++的auto关键字在C+⬑新标准出来之前基本...
const关键字是用于定义一个不该被改变的对象,它的作用是告诉...
文章浏览阅读315次。之前用C语言编过链表,这几天突然想用C+...
文章浏览阅读219次。碰到问题就要记录下来,防止遗忘吧。文章...