-2

私は C++ を使用しており、非常に深くネストされた一連の関数を使用しており、特殊なケースが発生したため、トップ レベルに戻りたいと考えています。

C++ の例外が非推奨になったと聞きましたが、この場合は代わりに何を使用すればよいでしょうか?

だから私が本当に求めているのは、c++ コードsetjmp()で大丈夫ですか?longjmp()

4

2 に答える 2

11

C++ 例外は推奨ではありませんが、例外仕様のみが非推奨です。
両者には違いがあります。RAII と例外を使用する必要があります。

于 2012-11-09T09:28:04.287 に答える
4

可能であればsetjmp/longjmp、ほとんどのCのように、C++コードでの使用は避けます。C ++の例外に関することについては、私が知る限り、非推奨ではありません。確かに、下位互換性を大幅に妨げることなく、このような普及している機能を廃止することは非常に難しいと思います。以前のバージョンの言語には存在しなかった最近のC++11標準の機能である、(何らかの形式の)例外仕様が、承認プロセス中に非推奨になったと聞いたことがあるかもしれません(たとえば、これを参照してください)。ハーブサッターのブログに投稿してください)。

とはいえ、C++の例外をうまく使用するのは簡単ではありません。C ++には多くの機能があり、非常に複雑な方法で相互作用することもあります。いくつかの必要な(しかし十分ではない)アドバイスは次のとおりです。

  • から例外を導き出しますstd::exception;
  • RAIIを介してリソースを管理します。
  • 値やポインタではなく、参照によってキャッチします。

ただし、最善のアドバイスは次のとおりです。例外がどのように機能するかを正確に理解する-事前に用意されたアドバイスはうまく機能しません。目的として、例外とRAIIの使用方法について、 thisthis、thisthis読むことができます。特に「より効果的なC++」には、例外に特化した章全体があり、明らかに単純なコードスニペットの複雑な結果を明らかにしています。それはあなたの言語の全体的な認識を高めます。

于 2012-11-09T09:50:50.677 に答える