3

Doug Harrison が、構造化された例外を使用する (つまり、キャッチする) ことの何が「間違っている」かについて良い意見を述べているのを見ました (質問 #3を参照)。しかし、他にどのような結果がありますか?たとえば、/eha でコンパイルされた複数のプロジェクトが、/ehs でコンパイルされた他のプロジェクトと混在している場合はどうなりますか? ライブラリが相互にリンクされているとき (コンパイル時または実行時) に問題はありますか?

しかし、それはほんの一例です。他にどのような問題が考えられますか?

4

1 に答える 1

2

/EHa は最適化を無効にします。/EHs が有効な場合、try {} でラップされたコードによって C++ 例外がスローされないことが確実な場合、コンパイラは例外フィルターを省略できます。これは、x86 と x64 では小さなスペースの最適化であり、x86 では非常に短い時間の最適化です。問題は、C++ 以外の例外をキャッチする場合にこれらのフィルターが必要になることです。その結果、C++ オブジェクトのデストラクタが呼び出されにそのような例外がキャッチされると、スタックが巻き戻されます。よくない、/EHa はそれを回避します。

混合によってリンカーの問題が発生することはありません。上記の問題を引き起こします。

はい、/EHa はまた、catch(...) に非常にばかげたことをさせます。本当にすべてをキャッチします。その難破船は少し前に出航しましたが、ポケモン C++ の例外処理も悪い考えです。

于 2011-02-19T21:43:01.867 に答える