何もスローしないメンバー関数があるので、その末尾にthrow()
サフィックスを追加して、例外がスローされないことを示しています。
私の質問は、関数でいくつかを使用std::string
し、の初期化で何かがうまくいかないと言うことができます、そしてそれはまたは(またはstd :: stringでうまくいかない可能性があるもの)std::string
をスローします。bad_alloc
out_of_range
接尾辞を追加しても安全throw()
ですか?
何もスローしないメンバー関数があるので、その末尾にthrow()
サフィックスを追加して、例外がスローされないことを示しています。
私の質問は、関数でいくつかを使用std::string
し、の初期化で何かがうまくいかないと言うことができます、そしてそれはまたは(またはstd :: stringでうまくいかない可能性があるもの)std::string
をスローします。bad_alloc
out_of_range
接尾辞を追加しても安全throw()
ですか?
ハーブサッターはそれを言います
例外仕様は、価値があるよりもはるかに少ない利益をもたらします
それは利益をもたらすよりも多くの問題を引き起こす可能性があります。したがって、それを行う前に賢明に考える必要があります。
例外仕様は、関数を記述したかどうかに関係なく、関数内で実行されるすべてのコードについて約束します。
関数std::string
内からスローすると、その約束は破られ、プログラムは失敗します。(std::unexpected
例外、通常はプログラムがハードに終了することを意味します)
仕様は、次のthrow()
場合にのみ適切です。
また
2つのこと。
まず、throw()
仕様は、関数がスローしないランタイムチェックを追加しstd::unexpected_exception
、promiseが破られた場合に呼び出して、プログラムを終了します。
2番目:throw()
推奨されておらず、C++11では非推奨になっています。noexcept
C ++ 11では、代わりに(またはより順応性のある形式)を使用できますnoexcept(boolean-expression)
。ランタイムチェックは作成されず、関数がスローされた場合の動作は未定義です。