2

エラーを示す戻り値の代わりにコードで C++ 例外を使用するため、コードは例外セーフである必要があります。したがって、関数宣言にコメントとして例外仕様を追加します。例えば:

// Does x and y. strong-guarantee
void XandY();

// Checks something.
bool CheckSomething() noexcept;

これは良い習慣ですか?

さらに、これらの仕様を作成するために自分のコードを評価する場合、C++ 例外、または nullptr の逆参照、オーバーフロー、ゼロ除算などの SEH 例外のみを考慮する必要がありますか?

C++ 例外をスローすることはありませんが、SEH 例外をスローする可能性があるサードパーティ ライブラリを使用するとします。そのライブラリの関数に依存する関数は、noexcept になることはありますか?

void MyFunction() noexcept // <-- Is noexcept viable?
{
    OtherFunction(); // may throw SEH exception
}
4

1 に答える 1

1

C++ 例外仕様は C++ 例外のみで機能し、Windows 例外 (SEH) では機能しません。try-catch特に、C++ のブロックを使用して Windows の例外をキャッチすることはできません。Windows 例外をスローする条件のほとんどは、標準によって未定義または実装定義の動作として分類されます。

于 2015-05-10T10:08:32.243 に答える