2017-04-11 79 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來說,隨着所有的轉發他們在那裏做的東西,它可能是不平凡的(雖然仍然「邊緣」)。

相關問題