3
我讀過關於noexcept說明符和編譯器優化的不清楚的事情。當指定noexcept
時,編譯器可以優化:noexcept說明符和編譯器優化
- 編譯時間(更快的編譯)。
- 執行時間(代碼運行速度更快)。
- 還是兩者兼而有之?
- 還是沒有?
我讀過關於noexcept說明符和編譯器優化的不清楚的事情。當指定noexcept
時,編譯器可以優化:noexcept說明符和編譯器優化
noexpect最初的原因是爲了讓庫在內部使用更快的移動構造函數,如果調用函數不允許按規範拋出。
接下來,當您的類型的移動構造函數和移動賦值使用noexcept註釋時,可以在STL向量等容器中實現大性能優化。當STL實用程序std :: move_if_noexcept檢測到您的移動不會拋出時,它將使用這些安全移動而不是用於某些操作(如調整大小)的副本。這在容器存儲數百萬個元素的情況下將實現巨大的優化。
(從using-noexcept報價)
此外,該編譯器不必產生堆棧回捲額外的代碼,如果它知道沒有異常,可以拋出由於noexpect符。
我看不到編譯時如何嚴重影響noexcept-specifiers。結果運行時間可能會快很多。
*編譯器*不會基於'noexcept'優化任何內容。只有你的*代碼*可以通過強制編譯器根據「noexcept」是否可用來選擇不同的函數來優化。 – 2013-03-17 07:35:39
@NicolBolas我知道使用noexcept的目的不是爲了優化。但是四處搜尋,我在這方面找到了混合的答案([就像這樣]](http://stackoverflow.com/q/10787766/1316620)),我仍然不清楚究竟什麼可以(或應該)被優化編譯器,或者即使早點告訴。 – talles 2013-03-17 13:05:59