xyl*_*per 6 c++ perfect-forwarding c++11
最近,我在这里阅读了 range-v3 的提交评论: https://github.com/ericniebler/range-v3/commit/a4829172c0d6c43687ba213c54f430202efd7497
提交消息说,
通过用 static_cast 替换 std::forward 略微缩短编译时间
我知道按标准来说是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)做了一些限制编译器的神奇事情?
每次这样做时std::forward<T>(t),编译器都必须实例化几个模板:std::forward它本身有两个重载,以及remove_reference哪个是函数签名的一部分。虽然这些模板不会生成太多代码,但它仍然需要完成模板实例化的工作。
对于大多数代码来说,这本质上是编译时的舍入错误。但对于 Ranges TS 来说,他们在那里转发所有的东西,这可能不是微不足道的(尽管仍然是“边缘”)。