問題タブ [noexcept]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
3 に答える
596 参照

c++ - 非スロースワップを実装するときに throw() を使用する必要がありますか?

スローしないスワップ イディオムを実装する場合、使用する必要がありますthrow()か?

throw()特にの専門化に仕様を載せるのが気になりstd::swapます。

おまけの質問:
C++0x のnoexceptキーワードを使用する場合、答えは異なりますか?

0 投票する
1 に答える
2074 参照

c++ - 「noexcept」と「Throws:nothing」

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の機能に追加する必要があるのか​​、追加しないのか。
0 投票する
1 に答える
1034 参照

testing - C ++ 0x:テスト用のnoexcept(ndebug)?

noexcept過度に使用すると、テスト可能なライブラリが妨げられる可能性があるという懸念について読みました。

検討:

noexceptコンパイラーによる注釈を使用すると、例外コードを最適化できます。これにより、適切な処理assert()(または作成者がここでテストに使用したい関数)を適切に処理できなくなる可能性があります。

したがって、図書館で無条件を使用することは決してなくnoexcept、常にそれをam-I-in-a-test-conditionと「リンク」することが可能かどうか疑問に思います。このような:

そして多分それをマクロとして追加します(しかし、私はそれが嫌いです):

どう思いますか?これはまったく意味がありますか?それとも実現可能ではありませんか?それとも問題を解決しませんか?それとも全く問題ありませんか?:-)

0 投票する
1 に答える
372 参照

c++ - 値渡しパラメーターと noexcept を持つコンストラクター

このコード例では:

ここの使い方はnoexcept正しいですか?wstring構築時にスローされる可能性がありますが、コンストラクターにいる前またはコンストラクターにいる間にスローが発生しますか?

編集:これは、値渡しのパラメーターを取る任意の関数に一般化できるとします。

0 投票する
4 に答える
1307 参照

c++ - ADL対応のトレーリングリターンタイプ、またはnoexcept仕様を作成するにはどうすればよいですか?

コンテナテンプレートなどを書いていると想像してみてください。そして、それに特化する時が来ましstd::swapた。善良な市民として、私は次のようなことを行うことでADLを有効にします。

これは非常にきちんとしていて、すべてです。例外仕様を追加したいまで。swapのスワップがであるnoexcept限り、私のはTですnoexcept。だから、私は次のようなものを書いているでしょう:

問題は、 ADLで発見されたまたはswapである必要があるということです。これをどのように処理しますか?swapstd::swap

0 投票する
1 に答える
1523 参照

c++ - 関数型定義の noexcept 指定子

noexcept 指定子は関数 typedef で受け入れられますか?

次のように:

直観的には、noexcept 指定子は、呼び出し側でいくつかの最適化を許可するため、理にかなっているように見えます。

gcc 4.6.1 からさまざまな回答が得られました。

結果: エラー: 'fptr' が例外仕様で宣言されました

しかし:

警告なしでコンパイルします。

0 投票する
2 に答える
4946 参照

c++ - 移動コンストラクターは noexcept である必要がありますか?

移動コンストラクター/代入がスローできるかどうかに関して、矛盾する記事をいくつか読んでいます。

したがって、ムーブ コンストラクター/代入が最終的な C++11 標準でスローできるかどうかを尋ねたいと思いますか?

0 投票する
2 に答える
799 参照

c++ - 値渡しの return と noexcept を持つ関数

この質問は、「値渡しパラメーターと noexcept を持つコンストラクター」の二重です。その質問は、値による関数引数の有効期間管理が呼び出し元の関数によって処理されることを示しました。したがって、呼び出し元は発生するすべての例外を処理し、呼び出された関数はそれ自体をマークできますnoexcept。出力端が でどのように処理されるのか疑問に思っていますnoexcept

戻り値が 内で正常に作成されたとしましょうMyFunctionMyType そして、適切な特別なメンバー関数 (copy/move-assignment/construction) が ではない可能性があるとしましょうnoexcept

  1. 呼び出された関数から呼び出し元への戻り値の転送に関する RVO/NRVO/Whatever-from-C++11 ルールnoexceptは、適切な特別なメンバー関数のステータスに関係なく、転送が常にスローなしで成功することを意味しますか?
  2. 前の質問に対する答えが「いいえ」の場合、戻り値転送がスローされる場合、例外は呼び出された関数または呼び出し元に対してカウントされますか?
  3. 前の質問に対する答えが「呼び出された関数」である場合、プレーンnoexceptマーカー onMyFunctionによって が呼び出されstd::terminateます。MyFunctionnoexceptプロファイルを何に変更する必要がありますか? Usenet でこれについて尋ねたところ、ある回答者はstd::is_nothrow_move_assignable<MyType>::value. (MyCaller戻り値を使用するいくつかの方法を使用しましたが、どの方法が使用されているかMyFunctionはわかりません! 答えはすべてのケースをカバーする必要があります。)MyTypeがコピー可能で移動不可能に変更された場合、違いはありますか?

したがって、2 番目と 3 番目の質問の最悪のケースが正確であるnoexcept場合、戻り値の型にスロー可能な動きがある場合、値によって返される関数はプレーンを持つことはできません! is_nothrow_move_assignable現在、スロー可能な移動を持つ型はまれである必要がありますが、テンプレート コードは、値による戻り値が使用されるたびに、それ自体を「ダーティ」にする必要があります。

呼び出された関数を責任あるものにするのは壊れていると思います:

この問題は、少なくとも私には、呼び出し元の側で修正可能 (ムーブ代入をtry/でラップするだけ) のように見えcatchますが、呼び出された関数の側からは修正できません。C++ のルールを変更する必要があるとしても、呼び出し元がこれを処理する必要があると思います。または、少なくとも何らかの欠陥レポートが必要です。

0 投票する
2 に答える
358 参照

c++ - 値と noexcept で返す

私は現在、noexcept に頭を悩ませようとしています (ほとんどの人と同じように、古い「実行時例外仕様」を避けました)。noexcept の基本的な考え方は理解できたと思いますが、次のような状況で何が起こるかはわかりません。

sample::operator- を noexcept として宣言しても安全ですか? (戻り時にコンストラクターを呼び出していることを考慮して)

編集: 質問の中心部分が明確ではなかったように思われるため、コード セクションを更新しました…</p>

0 投票する
1 に答える
2865 参照

c++ - GCC バージョン間で利用可能な C++11 機能を正しく検出するにはどうすればよいですか?

重複の可能性:
C++11 機能のチェック

私は特にnoexcept、GCC 4.7 の導入により C++11 標準ライブラリに散らばっているように見える仕様のケースに興味があります。この場合、コンパイラのバージョンを検出するだけで十分です。それは移植可能なコードを生成するための最良のメカニズムですか?