0

この質問がばかげているように聞こえる前に、説明させてください。C#、Java、および C++ を多く使用しています。私が気付いた主な点は、特にサードパーティのライブラリでのエラー処理です。C# および Java では、エラーを処理する一般的な方法は、従来の C のエラー処理方法である int とは対照的に、例外を使用することです。

これは、C#/Java でよく見られるものです。

try
{
    ExternalLibraryInit();
}
catch (ExternalLibraryException ex)
{
    //error
}

これは、C++ で一般的に見られるものです。

if (ExternalLibraryInit()) //Generally returns an int, which no error is 0 and a error is
//anything else
{
    //error
}

C++ で例外を無視する傾向があるのはなぜですか? それらを使用しない理由がわかりません。そのためにあるのではありませんか?

4

2 に答える 2

8

あなたが示す例(条件付き if)は、有効な状況として例外として認められません。
例外は、例外的な状況を処理するために使用されます。あなたの場合、関数は値を返すだけで、両方の結果が期待され、例外はありません。関数は、あなたが持っていないソースコードであるC(Cには例外をスローする例外はありません)APIである可能性があります。そのようなシナリオでは、条件付き if を取り除くことはできません。チェック後のエラー/例外の処理方法は完全にあなた次第です。ほとんどの場合、例外をスローして階層全体に伝播しますが、それは、API を処理する必要がある方法で処理した後です。

人々が例外を使用しない理由については、いくつかの理由 (または神話) が考えられます。私の頭に浮かぶ最も一般的な 3 つの理由は次のとおりです。

  • C++ の初期の頃、一部のプラットフォームは例外をサポートしていませんでした。
  • 例外処理はパフォーマンスのオーバーヘッドであるという考え方が広まっています。実際には、多くの場合、プロファイリングでそのようなボトルネックが示されることはありません。
  • C++ コードを作成するプログラマーのほとんどは、C++ に移行する C プログラマーであり、概念としての例外を明確に理解していません。
于 2013-06-04T03:14:37.427 に答える
4

私は C++ プログラマーですが、例外を使用することはほとんどありません。なぜなら、そのような非ローカル制御フローでは、プログラムが何を行っているかを判断するのが難しくなるためです。私は、目に見える制御フロー構造について推論するのは得意ですが、目に見えない制御フロー構造について推論するのは非常に苦手です。他の人は違った感じで、それに応じてプログラムします。

于 2013-06-04T03:19:59.447 に答える