本体なしで、try / catchブロックのみの関数/メソッドを実際に使用できますか?
質問
この関数には" {"がないことに注意してください。および"}"体。 try / catchブロックのみ:
void func( void )
try
{
...
}
catch(...)
{
...
}
これは意図的にC ++の一部ですか、それともg ++拡張機能ですか?
{}の1レベルをバイパスする以外の目的はありますか?
http://stupefydeveloper.blogspot.com/2008/10/c-function-try-catch-block.html
解決
はい、標準です。関数tryブロックは、呼び出されると、通常の関数にはあまり使用されませんが、コンストラクターでは、初期化リストでスローされた例外をキャッチできます。
コンストラクターの場合、例外はcatchブロックの最後で常に再スローされることに注意してください。
他のヒント
はい、それは有効なC ++です。私が見つけた目的の1つは、例外を戻り値に変換し、戻り値の例外を変換するコードを関数内の他のコードとは別にすることです。はい、示したようなcatchブロックから return x;
を実行できます(実際に発見したのはごく最近です)。しかし、私はおそらく別のレベルの中括弧を使用し、その場合は関数内にtry / catchを配置します。ほとんどのC ++プログラマーにとっては使い慣れたものになります。
別の目的は、コンストラクターの初期化リストによってスローされた例外をキャッチすることです。これは、同様の構文を使用します。
struct f {
g member;
f() try {
// empty
} catch(...) {
std::cerr << "thrown from constructor of g";
}
};
Herb Sutterにはこれに関する良い記事があります: http://www.gotw.ca/gotw /066.htm 。
所属していません StackOverflow