5
C ++での例外の慣用的な使用法
isocpp.org例外よくある質問の状態 関数の使用におけるコーディングエラーを示すために、throwを使用しないでください。assertまたはその他のメカニズムを使用して、プロセスをデバッガーに送信するか、プロセスをクラッシュさせて開発者がデバッグするためのクラッシュダンプを収集します。 一方、標準ライブラリはstd :: logic_errorとそのすべての派生物を定義します。これらは、他のことに加えてプログラミングエラーを処理することになっているように思えます。プログラミングエラーではなく、空の文字列をstd :: stof(invalid_argumentをスローします)に渡しますか?「1」/「0」以外の文字を含む文字列をプログラミングエラーではなくstd :: bitset(invalid_argumentをスローします)に渡しますか?プログラミングエラーではなく、無効なインデックス(out_of_rangeをスローします)でstd :: bitset :: setを呼び出していますか?そうでない場合、テストするプログラミングエラーは何ですか?std :: bitset文字列ベースのコンストラクタはC ++ 11以降にのみ存在するため、例外の慣用的な使用を念頭に置いて設計されている必要があります。一方、logic_errorは基本的にまったく使用すべきではないと言われました。 例外が頻繁に発生する別のルールは、「例外的な状況でのみ例外を使用する」です。しかし、ライブラリ関数はどのような状況が例外的であるかをどのように認識するのでしょうか?一部のプログラムでは、ファイルを開けないことは例外です。他の人にとっては、メモリを割り当てることができないことは例外ではないかもしれません。そして、その間に何百ものケースがあります。ソケットを作成できませんか?接続できない、またはソケットまたはファイルにデータを書き込むことができませんか?入力を解析できませんか?例外的かもしれませんが、そうでないかもしれません。関数自体は、一般的に間違いなく知ることができず、どの種類のコンテキストが呼び出されているのかわかりません。 だから、特定の機能に例外を使用するかどうかをどのように決定するのですか?実際には一貫性のある唯一の方法は、すべてのエラー処理に使用するか、または何もしないことです。標準ライブラリを使用している場合、その選択は私のために行われました。
16
design
c++
exceptions