1

C++11 では、デフォルトでデストラクタが指定さnoexceptれます。noexceptデストラクタが例外をスローする (したがって を呼び出す)ケースを Clang に報告させる方法はありstd::terminateますか?

4

1 に答える 1

1

noexceptまず、C++ はデフォルトでデストラクタを指定しません。
として指定しますnoexcept(all subobjects destructors are noexcept)

次に、式とステートメントをそれぞれ 1 つのカテゴリに分類できます。

  1. 決して戻らない、戻ってもよい、常に戻る。
  2. 投げない、投げてもいい、常に投げる。

それらのすべてにおいて、最初のケースのみが例外としてマークされます。

良い結果を得るために、コンパイラはプログラムの動作を十分に分析して、可能な状態でスローする式が実行されるかどうかを判断できる必要があります。

不可能なシナリオに関する警告が多すぎることに満足している場合は、ここで結果を得ることができます。
逆に、あからさまなケースについてのみ警告したい場合は、結果が得られることもあります。

問題は、すべての興味深いケースが停止問題の解決に発​​展することです。
いいえ、私たちはそれ以上進んでいません。

于 2014-11-10T22:25:14.817 に答える