1

C++ では、例外宣言指定子で、基底クラスを宣言してから派生クラスをスローすると、予期しない例外になりますか?

4

2 に答える 2

2

C++ では、例外宣言指定子で、基底クラスを宣言してから派生クラスをスローすると、予期しない例外になりますか?

いいえ、許可されています。

参考: C++03 15.4 例外仕様

パラ 6:

exception-specification には、同じ型を複数回含めることができ、継承によって関連付けられたクラスを含めることができますが、そうするのは冗長です。例外仕様には、クラス std::bad_exception (18.6.2.1) を含めることもできます。

パラグラフ 8に関連する例があります。

[Example:
class X { };
class Y { };
class Z: public X { };
class W { };
void f() throw (X, Y)
{
    int n = 0;
    if (n) throw X(); // OK
    if (n) throw Z(); // also OK    <------- Example of the exact scenario you posted
    throw W(); // will call unexpected()
}
—end example]

Exception 仕様は失敗した実験と見なされ、ほとんどのコンパイラはそれらを正しく実装していないことに注意してください。したがって、それらを使用しないでください(むしろ使用しないでください)。

于 2012-04-19T11:51:05.320 に答える
0

私はこれが恐ろしい非回答であることを知っていますが、例外指定を使用しないでください:

http://www.gotw.ca/publications/mill22.htm

関連部分を引用するには:

教訓 #1: 例外仕様を記述しないでください。

教訓その2: たぶん空のものを除いて、しかし私があなただったら、それさえも避けます.

#2 の注意点は、C++11 の「noexcept」です。

于 2012-04-19T11:50:55.470 に答える