簡體   English   中英

noexcept說明符和編譯器優化

[英]noexcept specifier and compiler optimizations

我已經閱讀了關於noexcept說明符和編譯器優化的不清楚的事情。 指定noexcept ,編譯器可能會優化:

  • 編譯時間(編譯速度更快)。
  • 執行時間(代碼運行得更快)。
  • 或兩者?
  • 還是沒有?

noexpect的最初原因是如果不允許調用函數按規范拋出,則允許庫在內部使用更快的move-constructors。

接下來,當您的類型的移動構造函數和移動賦值使用noexcept注釋時,可以在容器(如STL向量)中實現大的性能優化。 當STL實用程序std :: move_if_noexcept檢測到您的移動沒有​​拋出它時,將使用這些安全移動而不是復制某些操作(如調整大小)。 在容器存儲數百萬個元素的情況下,這將實現巨大的優化。

(引自using-noexcept


此外,如果編譯器知道由於noexpect說明符而不能拋出任何異常,則編譯器不必為堆棧展開生成額外的代碼。


我看不出編譯時如何受到noexcept-specifiers的嚴重影響。 但是,生成的運行時可以快得多。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM