問題タブ [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++ - デフォルトで定義された移動コンストラクターの noexcept のルールは何ですか?
特に関連して、可能であればstd::vector
型がnoexcept
移動可能であることが重要です。
= default
したがって、次のような移動コンストラクターを宣言するとき
std::is_nothrow_move_constructible<Object1>::value
のtrue
すべてのメンバー (ここでは 0)Object1
は notrow-move-constructible であり、ここで回答されます。
= default
しかし、次のコードのように、ムーブ コピー コンストラクターが宣言され、後で定義されている場合はどうなるでしょうか。
g++ 4.9.2 ではstd::is_nothrow_move_constructible<Object2>::value
、false
宣言と定義の両方noexcept
を make itとしてマークする必要がありtrue
ます。
今、私が興味を持っているのは、実際のルールが何であるかです。特に、Effective Modern C++の Item 22 (Scott Meyers) は、私がObject2
.
c++ - noexcept としてマークされた関数は、例外を内部に持つことができますか?
noexcept
とマークされた関数があるが、内部にスローできるコード行があるとしましょう。そのコード行は try ブロックになり、例外がキャッチされます。それは何かを引き起こしますか?
c++ - 定数式で呼び出された `static constexpr` 関数は...エラーですか?
次のコードがあります。
sincefoo()
はstatic constexpr
関数であり、bar
宣言される前に定義されているため、これは完全に受け入れられると思います。
ただし、g++
次のエラーが表示されます。
定数式で関数を呼び出す機能がの要点であるconstexpr
ため、これは役に立ちません。
clang++
はもう少し役に立ちます。noexcept
への引数は定数式でなければならないというエラー メッセージに加えて、次のように表示されます。
それで...これは2パスコンパイルの問題ですか?コンパイラーがクラス内のすべてのメンバー関数を定義する前に宣言しようとしているという問題はありますか? (クラスのコンテキストの外では、どちらのコンパイラもエラーをスローしないことに注意してください。) これには驚きました。static constexpr
直感的には、クラスの内外を問わず、すべての定数式でメンバー関数を使用できない理由がわかりません。
c++ - C++11、「noexcept」指定子、定義と宣言
宣言された関数に指定子noexcept
( noexcept
、noexcept(true)
、noexcept(false)
、または または に評価される他のものnoexcept(expr)
)があるが、それが別の場所で定義されている場合、定義で指定子を再度指定する必要がありますか、それとも前方宣言でのみ指定する必要がありますか?true
false
noexcept
c++ - C++ は「noexcept」指定子と「noexcept(false)」を省略していますが、正確な意味は何ですか?
関数をnoexcept(false)
、または false と評価されるその他の式としてマークした場合、それはどういう意味ですか? (1) 関数が例外をスローできることをコンパイラーに保証していますか? (2) または、関数が例外をスローできるかどうかについて何も保証していませんか?
noexcept
最後に、指定子を省略した場合、それは と同等noexcept(false)
か、それとも上記の (2) の意味のみと同等か?
c++ - クラスnoexceptの外で定義されたデフォルトコンストラクタを作成する方法は?
としてマークされたコンストラクターは、可能な限り=default
「試行」することを知っています。ただし、クラスの外noexcept
で定義すると、次のコードからわかるように、もはやそうではありません。noexcept
=default
クラスの外でそのようなコンストラクターを定義して作成するにはどうすればよいnoexcept
ですか? noexcept(false)
そして、クラスの外で定義されている場合、なぜそのようなコンストラクターなのですか? この問題は、スマート ポインターを介してPIMPLを実装するときに発生します。