関数 try ブロックは、関数本体の特別な形式です。たとえば、次のようになります。
int f() try {
// function body
}
catch {
// one or more catch-clauses.
}
主な目的は、基本クラスのコンストラクターによってスローされた例外をログに記録するために、コンストラクターで使用することです。ただし、通常の関数でも使用できます。
これにはいくつかの (かなり古い) 質問があり、通常の関数 (たとえばFunction try ブロックなど) ではなぜそれが必要なのか、コンストラクターでは必要ないのかという質問があります。ただし、私の質問は少し別の方向にあります。通常の try ブロックの代わりに通常の関数で問題なく使用できますか? たとえば、審美的な理由だけでしょうか。
私は C++ ライブラリ用の C インターフェイスを開発しており、例外をキャッチするために各インターフェイス関数を try ブロックでカプセル化する必要があります。したがって、各関数に追加の中括弧ブロックを避けたいと思います...
私の懸念を引き起こした 1 つのこと: https://stackoverflow.com/a/11535436/6695750の回答で、davka は 2000 年の記事を引用しています。関数試行ブロック。gcc 5.4.0 でテストしたところ、catch ブロックから問題なく値を返すことができました。これは標準ですか、それとも gcc の非標準拡張ですか?