9

少し前にSOの質問で独特の構文を見ました。

class B{
    A a;
    public:
        B() try : a() {} catch(string& s) { cout << &s << " " << s << endl; };
};

関数の外にあるこの try-catch-block の意味は何ですか?

4

2 に答える 2

10

関数tryブロックです。派生クラスのコンストラクターでエラーをキャッチするための c-tors でのみ役立ちます。この機能の詳細については、n3337 ドラフト パーなどの標準で読むことができます。15、15.1。

4 function-try-block は、handler-seq を ctor-initializer (存在する場合) および複合ステートメントに関連付けます。複合文の実行中、またはコンストラクタとデストラクタの場合は、クラスのサブオブジェクトの初期化または破棄中にスローされた例外は、例外と同じ方法で function-try-block のハンドラに制御を移します。 try ブロックの実行中にスローされ、他のハンドラーに制御を移します。[ 例:

int f(int);
class C {
int i;
double d;
public:
C(int, double);
};
C::C(int ii, double id)
try : i(f(ii)), d(id) {
// constructor statements
}
catch (...) {
// handles exceptions thrown from the ctor-initializer
// and from the constructor statements
}

—終わりの例]

于 2012-07-20T09:09:41.137 に答える
0

メンバー オブジェクトの作成時にコンストラクターからスローされた例外をキャッチします。あなたが言及した質問に対する回答の 1 つに、詳細を説明するリンクが含まれています: http://www.gotw.ca/gotw/066.htm

于 2012-07-20T09:21:33.137 に答える