問題タブ [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++ - Visual Studio で noexcept を処理する方法
std::exception
から派生してオーバーライドするカスタム例外を作成しようとしていますwhat()
。最初に、次のように書きました。
これは VS2012 では正常に動作しますが、GCC 4.8 では-std=c++11
次のようにコンパイルされません。
エラー: 'virtual const char* UserException::what() const' の緩いスロー指定子</p>
だから私は追加しnoexcept
ます:
これは GCC では正常に動作しますが、Visual Studio ではコンパイルされません (VS 2012 は をサポートしていないためnoexcept
)。
エラー C3646: 'noexcept': オーバーライド指定子が不明です
これに対処するための推奨される方法は何ですか? 同じコードを両方のコンパイラでコンパイルしたいのですが、C++11 機能を使用しているため、異なる .xml でコンパイルすることはできません-std
。
c++ - デフォルトの特別なメンバー関数を強制的に noexcept にすることはできますか?
次の構造は、移動代入演算子を として宣言したため、C++11 でコンパイルできませんnoexcept
。
コンパイラによって生成されるデフォルトのムーブ代入演算子は、noexcept(false)
ムーブstd::vector<int>
代入も同様であるためnoexcept(false)
です。これは、デフォルトのアロケータが にstd::allocator_traits<T>:: propagate_on_container_move_assignment
設定されているためstd::false_type
です。この質問も参照してください。
これは C++14 で修正されたと思います (ライブラリの欠陥 2103を参照)。
私の質問は、noexcept
自分で定義せずにデフォルトの移動代入代入演算子を強制する方法はありますか?
これが不可能な場合、構造体に渡されるようstd::vector<int>
にnoexcept
、移動割り当て可能にする方法はありますか?noexcept(true)
c++ - コピーアンドスワップイディオムを使用して代入演算子でnoexceptを使用するには?
移動代入演算子は、多くの場合、noexcept として宣言する必要があります (つまり、型を STL コンテナーに格納するため)。しかし、copy-and-swap イディオムを使用すると、copy-代入演算子と move-代入演算子の両方を 1 つのコードで定義できます。この場合、noexcept 指定子をどうするか? コピー構造はスローできますが、noexcept 指定子に違反できるかどうかは疑問です。
c++ - noexcept はメンバー関数の noexcept に依存します
検討:
GCCはノーと言います:
同様に:
と
これは標準で意図された動作ですか、それとも GCC (4.8.0) のバグですか?
c++ - ベクトル アクセス演算子が noexcept として指定されないのはなぜですか?
、およびメンバー関数が として指定されていないstd::vector
のはなぜですか?operator[]
front
back
noexcept
c++ - 関数の宣言と定義で noexcept 指定子を使用しますか?
次の関数を検討してください。
noexcept
型T
が非スロー構築可能である場合、この関数を作成したいと思います。
どうやってするか ?(つまり、構文は何ですか?)
c++ - タイプまたは例外仕様として使用される場合、「以下を参照」とはどういう意味ですか?
C++ 標準 (現在のドラフトhttp://isocpp.org/files/papers/N3690.pdf、秒 20.8.3 はそのような場所の 1 つ) と LLVM の libc++ ヘッダーを調べて、「以下を参照」がタイプと例外の仕様。タイプが存在しない場合に使用されるようですが、ある種の有効な識別子の代わりに 2 語のフレーズを使用するのは奇妙に思えました。
標準のどこかまたは他の場所で議論されていますか? なぜ/どのように使用されますか?