0

||は よりも冗長で入力しやすいためif (...)、次のことを行う方法が必要です (これは私のコードで頻繁に発生します)。

int bar() {...; return successFlag;}
int foo() {
    bar() || return(...);  // return early on errors
    ...
}

出来ますか?

またはさらに良いことに、連鎖する代わりにfromにreturn戻ることは可能ですか?mainbarfoo

4

2 に答える 2

2

最初の部分では、 no:returnは式ではなくキーワードであるため、その形式で結合することはできません。||英語の意味で「または」を意味するように文字通り文字通り読んでいると思います-明らかにそれは意味するものではありません.

2 番目の部分については、理論的には例外を使用することもできますが、これは推奨されない方法です。例外は、「例外的な状況」、より具体的には、コードがローカルで (現在の関数/メソッドのコンテキストで) 回復できず、より高いレベルで適切なアクションを決定する必要があるエラー状態を対象としています。

一般的なフロー制御メカニズムとして例外を使用すると、次の 2 つの問題があります。

  • パフォーマンス: C++ コンパイラは、「例外的でない」コード パス用に最適化されているため (これが通常の動作であるため)、例外処理メカニズムは非常に遅くなる傾向があります。これは、コードの最適化の欠如によるものではなく、例外が処理に多くの作業を要するためのコストであっても、例外がなければゼロまたはゼロに近いコストを持つメカニズムの必要性によるものです。

  • コードの明瞭性/テスト容易性: 制御フローに例外を使用すると、コードが非常に読みづらくなり、単体での適切な単体テストが難しくなります。

于 2013-05-12T13:17:36.237 に答える