2017-04-11 81 views
3

最近,我读的范围-V3在这里提交评论: https://github.com/ericniebler/range-v3/commit/a4829172c0d6c43687ba213c54f430202efd7497static_cast <T&&>(t)快于std :: forward <T>(t)用于编译?

的提交消息称,

略微提高通过更换STD与 的static_cast

::向前编译时间

我知道std::forward<T>(t)按标准返回static_cast<T&&>(t)。 另外我知道有时static_cast<T&&>(t)将工作正常时T &&t是通用引用(或转发引用)通过引用崩溃规则。

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

也许std::forward<T>(t)需要某种扣除?或者,std::forward<T>(t)做一些神奇的事情,它会调节编译器?

回答

2

每次你做std::forward<T>(t)时,编译器必须实例化模板std::forward(或者至少检查一下,是否已经用之前的T实例化了它)。虽然这个模板不会产生太多的代码,但它仍然需要做模板实例化的工作。

对于大多数代码来说,这实际上是编译时的舍入错误。但对于Ranges TS来说,随着所有的转发他们在那里做的东西,它可能是不平凡的(虽然仍然“边缘”)。

相关问题