本でコードを見た:
T& operator[](int i) throw(RangeError)
{
if(i >= 0 && i < sz) return ptr[i];
throw RangeError();
}
throw(RangeError) とはどういう意味ですか? 関数宣言の後ろに、const または =0 (純粋仮想の場合) を追加できることは知っていますが、throw(...) を見たことはありません。
特例仕様です。これは、関数がスローできるもののリストが限られていることをすべての人に伝えることを意味します。残念ながらそうではないかもしれませんが、実際に関数から何か他のものをスローすることを妨げるものは何もありませんが、実行時に予期しない何かがスローされた場合は、unexpected()
が呼び出されます。新しい C++ 標準では、例外仕様が削除されました。
void f() throw(); //I promise not to throw anything
void g() throw(A, B, C); // I promise not to throw anything except for A, B, or C
const 修飾子とは異なり、例外指定は関数の型の一部ではありません。
例外仕様です。RangeError
これは、関数がその型またはそのサブタイプの期待のみをスローする可能性があることをコンパイラに伝えます。