noexcept指定子とコンパイラの最適化に関する不明確なことを読みました。noexcept
コンパイラを指定すると、次のことが最適化される場合があります。
- コンパイル時間(より高速なコンパイル)。
- 実行時間(コードの実行速度が速くなります)。
- または両方?
- またはなし?
noexcept指定子とコンパイラの最適化に関する不明確なことを読みました。noexcept
コンパイラを指定すると、次のことが最適化される場合があります。
noexpect の本来の理由は、呼び出し元の関数が仕様によってスローを許可されていない場合に、ライブラリがより高速な move-constructors を内部で使用できるようにすることでした。
次に、タイプのムーブ コンストラクターとムーブ割り当てに noexcept アノテーションが付けられている場合、STL ベクトルなどのコンテナーでパフォーマンスを大幅に最適化できます。STL ユーティリティ std::move_if_noexcept は、移動がスローされないことを検出すると、一部の操作 (サイズ変更など) に対してコピーではなくこれらの安全な移動を使用します。これにより、数百万の要素を格納するコンテナーの場合、大幅な最適化が可能になります。
( using-noexceptから引用)
さらに、コンパイラは、noexpect 指定子が原因でスローされる例外がないことがわかっている場合、スタックの巻き戻しのために追加のコードを生成する必要はありません。
コンパイル時間が noexcept-specifiers によってどのように実質的に影響を受けるかわかりません。ただし、実行時間は大幅に短縮されます。