問題タブ [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.
c++ - 非スロースワップを実装するときに throw() を使用する必要がありますか?
スローしないスワップ イディオムを実装する場合、使用する必要がありますthrow()
か?
throw()
特にの専門化に仕様を載せるのが気になりstd::swap
ます。
おまけの質問:
C++0x のnoexcept
キーワードを使用する場合、答えは異なりますか?
c++ - 「noexcept」と「Throws:nothing」
C ++ 0xワーキングドラフトの最後の編集を行っている間に、私は多くのことを見つけました
- キーワードの削除
noexcept
- テキストスローの追加:同じ場所には何もありません
およびその逆。ほんの一例:
noexcept
スローに対する置換:なし:20.6.4ポインターの安全性[util.dynamic.safety]template<class T> T*undeclare_reachable(T*p);
- 追加
noexcept
:20.6.3.2。ポインター特性メンバー関数[pointer.traits.functions]:static pointer pointer_trait<T*>::pointer_to(...) noexcept;
ここでの質問:
noexcept
対スローを見つけるときの一般的なルール/パターンはありますか: Std-Libには何もありませんか?- ユーザーは、その特定のルールによって特定の動作を導き出す必要がありますか?つまり、自分
noexcept
の機能に追加する必要があるのか、追加しないのか。
testing - C ++ 0x:テスト用のnoexcept(ndebug)?
noexcept
過度に使用すると、テスト可能なライブラリが妨げられる可能性があるという懸念について読みました。
検討:
noexcept
コンパイラーによる注釈を使用すると、例外コードを最適化できます。これにより、適切な処理assert()
(または作成者がここでテストに使用したい関数)を適切に処理できなくなる可能性があります。
したがって、図書館で無条件を使用することは決してなくnoexcept
、常にそれをam-I-in-a-test-conditionと「リンク」することが可能かどうか疑問に思います。このような:
そして多分それをマクロとして追加します(しかし、私はそれが嫌いです):
どう思いますか?これはまったく意味がありますか?それとも実現可能ではありませんか?それとも問題を解決しませんか?それとも全く問題ありませんか?:-)
c++ - 値渡しパラメーターと noexcept を持つコンストラクター
このコード例では:
ここの使い方はnoexcept
正しいですか?wstring
構築時にスローされる可能性がありますが、コンストラクターにいる前またはコンストラクターにいる間にスローが発生しますか?
編集:これは、値渡しのパラメーターを取る任意の関数に一般化できるとします。
c++ - ADL対応のトレーリングリターンタイプ、またはnoexcept仕様を作成するにはどうすればよいですか?
コンテナテンプレートなどを書いていると想像してみてください。そして、それに特化する時が来ましstd::swap
た。善良な市民として、私は次のようなことを行うことでADLを有効にします。
これは非常にきちんとしていて、すべてです。例外仕様を追加したいまで。swap
のスワップがであるnoexcept
限り、私のはT
ですnoexcept
。だから、私は次のようなものを書いているでしょう:
問題は、 ADLで発見されたまたはswap
である必要があるということです。これをどのように処理しますか?swap
std::swap
c++ - 関数型定義の noexcept 指定子
noexcept 指定子は関数 typedef で受け入れられますか?
次のように:
直観的には、noexcept 指定子は、呼び出し側でいくつかの最適化を許可するため、理にかなっているように見えます。
gcc 4.6.1 からさまざまな回答が得られました。
結果: エラー: 'fptr' が例外仕様で宣言されました
しかし:
警告なしでコンパイルします。
c++ - 移動コンストラクターは noexcept である必要がありますか?
移動コンストラクター/代入がスローできるかどうかに関して、矛盾する記事をいくつか読んでいます。
したがって、ムーブ コンストラクター/代入が最終的な C++11 標準でスローできるかどうかを尋ねたいと思いますか?
c++ - 値渡しの return と noexcept を持つ関数
この質問は、「値渡しパラメーターと noexcept を持つコンストラクター」の二重です。その質問は、値による関数引数の有効期間管理が呼び出し元の関数によって処理されることを示しました。したがって、呼び出し元は発生するすべての例外を処理し、呼び出された関数はそれ自体をマークできますnoexcept
。出力端が でどのように処理されるのか疑問に思っていますnoexcept
。
戻り値が 内で正常に作成されたとしましょうMyFunction
。MyType
そして、適切な特別なメンバー関数 (copy/move-assignment/construction) が ではない可能性があるとしましょうnoexcept
。
- 呼び出された関数から呼び出し元への戻り値の転送に関する RVO/NRVO/Whatever-from-C++11 ルール
noexcept
は、適切な特別なメンバー関数のステータスに関係なく、転送が常にスローなしで成功することを意味しますか? - 前の質問に対する答えが「いいえ」の場合、戻り値転送がスローされる場合、例外は呼び出された関数または呼び出し元に対してカウントされますか?
- 前の質問に対する答えが「呼び出された関数」である場合、プレーン
noexcept
マーカー onMyFunction
によって が呼び出されstd::terminate
ます。MyFunction
のnoexcept
プロファイルを何に変更する必要がありますか? Usenet でこれについて尋ねたところ、ある回答者はstd::is_nothrow_move_assignable<MyType>::value
. (MyCaller
戻り値を使用するいくつかの方法を使用しましたが、どの方法が使用されているかMyFunction
はわかりません! 答えはすべてのケースをカバーする必要があります。)MyType
がコピー可能で移動不可能に変更された場合、違いはありますか?
したがって、2 番目と 3 番目の質問の最悪のケースが正確であるnoexcept
場合、戻り値の型にスロー可能な動きがある場合、値によって返される関数はプレーンを持つことはできません! is_nothrow_move_assignable
現在、スロー可能な移動を持つ型はまれである必要がありますが、テンプレート コードは、値による戻り値が使用されるたびに、それ自体を「ダーティ」にする必要があります。
呼び出された関数を責任あるものにするのは壊れていると思います:
この問題は、少なくとも私には、呼び出し元の側で修正可能 (ムーブ代入をtry
/でラップするだけ) のように見えcatch
ますが、呼び出された関数の側からは修正できません。C++ のルールを変更する必要があるとしても、呼び出し元がこれを処理する必要があると思います。または、少なくとも何らかの欠陥レポートが必要です。
c++ - 値と noexcept で返す
私は現在、noexcept に頭を悩ませようとしています (ほとんどの人と同じように、古い「実行時例外仕様」を避けました)。noexcept の基本的な考え方は理解できたと思いますが、次のような状況で何が起こるかはわかりません。
sample::operator- を noexcept として宣言しても安全ですか? (戻り時にコンストラクターを呼び出していることを考慮して)
編集: 質問の中心部分が明確ではなかったように思われるため、コード セクションを更新しました…</p>
c++ - GCC バージョン間で利用可能な C++11 機能を正しく検出するにはどうすればよいですか?
重複の可能性:
C++11 機能のチェック
私は特にnoexcept
、GCC 4.7 の導入により C++11 標準ライブラリに散らばっているように見える仕様のケースに興味があります。この場合、コンパイラのバージョンを検出するだけで十分です。それは移植可能なコードを生成するための最良のメカニズムですか?