最近,我在这里阅读了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)
是否会做一些限制编译器的神奇事物?
答案 0 :(得分:3)
每次执行std::forward<T>(t)
时,编译器都必须实例化模板std::forward
(或至少检查它是否已使用T
实例化它)。虽然这个模板没有生成很多代码,但它仍然需要进行模板实例化。
对于大多数代码,这在编译时基本上是一个舍入错误。但是对于Ranges TS而言,他们所做的所有转发工作都可能是非常重要的(尽管仍然是边缘&#34;)。