static_cast <t &&>(t)比编译std :: forward <t>(t)更快?

时间:2017-04-11 15:49:40

标签: c++ c++11 perfect-forwarding

最近,我在这里阅读了range-v3的提交评论: https://github.com/ericniebler/range-v3/commit/a4829172c0d6c43687ba213c54f430202efd7497

提交消息说,

  

通过用std替换std :: forward来略微改善编译时间   的static_cast

我知道std::forward<T>(t)按标准返回static_cast<T&&>(t)。 另外我知道,当static_cast<T&&>(t)通过引用折叠规则进行普遍引用(或转发引用)时,T &&t有效。{/ p>

我感兴趣的是提交消息说static_cast提高了编译性能。如果std::forward<T>(t)只返回static_cast<T&&>(t),那么在编译性能上有什么不同呢?

也许std::forward<T>(t)需要某种推论吗?或者,std::forward<T>(t)是否会做一些限制编译器的神奇事物?

1 个答案:

答案 0 :(得分:3)

每次执行std::forward<T>(t)时,编译器都必须实例化模板std::forward(或至少检查它是否已使用T实例化它)。虽然这个模板没有生成很多代码,但它仍然需要进行模板实例化。

对于大多数代码,这在编译时基本上是一个舍入错误。但是对于Ranges TS而言,他们所做的所有转发工作都可能是非常重要的(尽管仍然是边缘&#34;)。