3

C++ の例外について 2 つの質問/考察/疑問があります。

  1. IMO コードで例外を使用することを考えるとき、明確な決定を下す必要があります - 常に例外を使用するか、まったく使用しないでください。これにより、アプリケーションがエラーを処理する方法が明確になり、コードが読みやすくなります。また、何かが例外をスローする可能性があると常に想定しており、ほとんどどこにでも try/catch ブロックを配置しています。私の「ルール」は合理的ですか?

  2. から派生した STL クラスおよびアルゴリズムによってスローされるすべての例外std::exceptionですか? runtime_error私の例外クラスは常に標準クラス (など)から派生しますlogic_error。2 番目のものは常に例外の原因に関する情報を提供するため、catch (...)安全に に置き換えることができるかどうか疑問に思います。catch(const std::exception& object)

4

4 に答える 4

2

最初の部分では、c++ の例外について、いつスローすべきか、いつキャッチすべきか、なぜそれらが有用なのか、その他多くの役立つものについて読む価値があります。 http://www.parashift.com/c++-faq/exceptions.html

2番目の部分については、stlから例外をキャッチしているかどうかを知る限り、安全に使用できるはずです(const std::exception& object)

于 2012-12-20T01:19:33.113 に答える
0

それらのtry/catchブロックの目的は何ですか?もちろん、例外を処理できない場合は、それをキャッチするべきではありません。理由もなく捕まえているようですね。

また、このビデオをチェックしてください:C ++ and Beyond 2012:AndreiAlexandrescu-C++での体系的なエラー処理

はい、すべての例外クラスはstd::exceptionから継承する必要があります。完全を期すために、通常はメインの下部にキャッチ(...)を付ける必要があります。

于 2012-12-20T01:34:50.267 に答える
0
  1. あなたが言っていることがわかります。Steve mcConnell は Code Complete で、例外は例外的な状況でのみ使用すべきであると書いています。つまり、ハード ドライブの空き容量やデータベース接続など、何かが実際にそこにあると予想される場合です。彼は続けて、制御フローに例外を使用すべきではないと述べています。これがエラーコードの出番です。必要に応じて両方を使用します。

  2. std テンプレート ライブラリには、例外の基本型を特定する方法が必要です。私の経験では、すべてが std::exception から派生しています

于 2012-12-20T01:26:08.287 に答える
0

2 番目の質問については、はい、標準ライブラリでスローされるすべての例外は から派生しstd::exceptionます。

最初の質問は、具体的な答えを出すのが難しいです。重要なプログラムでは、例外を完全に回避することは非常に困難です。Herb Sutter は、ここでとてもうまくやっていると思います。

于 2012-12-20T01:27:29.540 に答える