14

C ++ 0xワーキングドラフトの最後の編集を行っている間に、私は多くのことを見つけました

  • キーワードの削除noexcept
  • テキストスローの追加:同じ場所には何もありません

およびその逆。ほんの一例:

  • noexceptスローに対する置換:なし20.6.4ポインターの安全性[util.dynamic.safety] template<class T> T*undeclare_reachable(T*p);
  • 追加noexcept20.6.3.2。ポインター特性メンバー関数[pointer.traits.functions]static pointer pointer_trait<T*>::pointer_to(...) noexcept;

ここでの質問:

  • noexcept対スローを見つけるときの一般的なルール/パターンはありますか: Std-Libには何もありませんか?
  • ユーザーは、その特定のルールによって特定の動作を導き出す必要がありますか?つまり、自分noexceptの機能に追加する必要があるのか​​、追加しないのか。
4

1 に答える 1

16

マドリッドでは、次のガイドラインを含むN3279の影響を強く受けました。

採用されたガイドライン

  • ライブラリデストラクタはスローしないでください。それらは、暗黙的に提供された(スローしない)例外仕様を使用するものとします。

  • LWGがスローできないことに同意する、幅広いコントラクトを持つ各ライブラリ関数は、無条件にnoexceptとしてマークする必要があります。

  • ライブラリスワップ関数、move-constructor、またはmove-assignment演算子が条件付きで広い場合(つまり、noexcept演算子を適用することでスローしないことが証明できる場合)、条件付きnoexceptとしてマークする必要があります。他の関数は条件付きnoexcept指定を使用するべきではありません。

  • 「C」コードとの互換性のために設計されたライブラリ関数(アトミック機能など)は、無条件にnoexceptとしてマークされる場合があります。

私はこれらのガイドラインを必ずしもより多くの聴衆を対象としているとは解釈しません。これは主に、noexceptを追加することで下位互換性の懸念があることを認めています。間違えた場合は、次の標準で削除するよりも追加する方が簡単です。そこで、保守的かつ体系的なnoexceptの適用を試みました。

于 2011-04-22T14:19:41.277 に答える