C++ では、例外指定子を使用して、関数が例外をスローするかどうかを指定できます。例えば:
void foo() throw(); // guaranteed not to throw an exception
void bar() throw(int); // may throw an exception of type int
void baz() throw(...); // may throw an exception of some unspecified type
次の理由から、実際にそれらを使用することに疑問があります。
- コンパイラは厳密な方法で例外指定子を実際に強制するわけではないため、メリットは大きくありません。理想的には、コンパイル エラーを取得したいと考えています。
- 関数が例外指定子に違反した場合、標準的な動作はプログラムを終了することだと思います。
- VS.Net では、throw(X) を throw(...) として扱うため、標準への準拠は強くありません。
例外指定子を使用する必要があると思いますか?
「はい」または「いいえ」で答え、その理由を説明してください。