2014-09-05 100 views
2

我正在移植一些代碼,原來的作者顯然非常關心從代碼中擠出儘可能多的性能。不同類型初始化的性能

整個(而且也成百上千的源文件的),有很多這樣的事情:

float f = (float)(6); 
type_float tf = (type_float)(0); //type_float is a typedef of float xor double 

總之,筆者試圖進行分配等於變量的RHS被分配到。我認爲,目的是強迫編譯器製作例如將第一個示例中的6複製到6.0f中,以便在將該值複製到變量中時不會發生轉換開銷。

對於類似於第二個例子的情況,這實際上是有用的,其中文字的正確形式({0.0f,0.0}之一)未知/可以從遠離的線改變。但是,如果將文字轉換並存儲到臨時文件中,然後進行復制,而不是在副本上進行轉換,則可以看到存在問題。

這位作者是在這裏的東西?所有這些文字實際上是否與預期類型一起存儲?或者這只是源文件位的大量浪費?在現代代碼中處理這類案件的最佳方式是什麼?

注意:我相信這適用於C和C++,所以我已經應用了兩個標記。

+0

沒有與表演有關的理由把演員放在右手邊。很確定這是一個文體選擇。 – Brian 2014-09-05 21:06:09

+0

老實說,在這兩個表演都是表現無關緊要。不管(如果可能)轉換都會發生。提交人很可能通過任務授權來壓制正在發佈的過多警告。 (即失去精確度等)。 – WhozCraig 2014-09-05 21:06:13

+0

爲什麼生產質量編譯器不能爲自己做這麼簡單的事情? – Leushenko 2014-09-05 21:06:24

回答

4

這是一個完整的浪費。現代優化編譯器不會保留任何中間值的跟蹤,而是直接使用最終的正確值進行初始化。其中沒有任何意義,默認轉換應該始終做正確的事情,在這裏。是的,這應該適用於C和C++,它們在行爲上應該沒有太大差別。