1

VC ++ 2008および2010を使用する場合、関数が例外をスローしないことを示すために使用するのに適したマーカーは次のとおりです。

  • throw()(C ++標準)
  • __declspec(nothrow)(MS拡張子)

私はいくつかの古いフォーラムの議論を読みました。そこでthrow()は、関数が(マーカーに対して)スローされた場合に、を使用すると、コンパイラーが例外をキャッチするための追加のコードを実際に生成する可能性があると言われました。彼らのアドバイスは、コンパイラが実際に最適化に使用できるため、使用するのではなく、代わりに使用することですthrow()__declspec(nothrow)

私はいくつかの検索をしましたが、本当に有用な結果を思い付くことができませんでした。私の理解では、Boostライブラリはここでそれらを使用しないようにアドバイスしています。__declspec(nothrow)は非標準のC++であるため、MSが例外仕様を実装している場合、throw()動作が変わる可能性がある間も同じように機能し続けます。

4

1 に答える 1

2

標準形式はですnoexceptが、VC++2008および2010はこれをサポートしていません。

throw()個人的には、コンパイラがC ++ 11のサポートを開始するまで(または何もない)と定義されたマクロを使用し、noexceptそれを変更します。

于 2012-01-27T21:34:44.067 に答える