[解決済み] デフォルトのMoveコンストラクタはnoexceptで定義されていますか?
質問
ベクターは再割り当ての際に要素を移動するかコピーするかを決定する前に、移動コンストラクタがnoexceptとしてラベル付けされているかどうかを確認するようです。デフォルトのmoveコンストラクタはnoexceptとして定義されているのでしょうか?以下のようなドキュメントを見ましたが、これについては明記されていませんでした。 http://en.cppreference.com/w/cpp/language/move_constructor
暗黙のうちに宣言された移動コンストラクタ
クラス型(構造体、クラス、ユニオン)にユーザ定義の移動コンストラクタがない場合 のコンストラクタが提供されていない場合(構造体、クラス、ユニオン)。 ユーザー定義のコピー コンストラクタがなく、次のすべてが当てはまる場合。 ユーザー定義されたコピー コンストラクタがない。 ユーザー定義されたコピー代入演算子がない。 ユーザー定義された移動代入演算子がない。 ユーザが宣言したデストラクタがない。 暗黙的に宣言された移動コンストラクタが削除されたと定義されていない。 次のセクションで説明する条件により、削除されたと定義されていない。 この場合、コンパイラは移動コンストラクタをクラスのインライン public メンバとして宣言します。 T::T(T&&) というシグネチャを持つクラスのインライン public メンバとして宣言します。 例えば T::T(const T&&) と T::T(T&&) のように、クラスは複数の移動コンストラクタを持つことができます。 ユーザ定義の移動コンストラクタが存在する場合でも、ユーザは暗黙のうちに 暗黙のうちに宣言された移動コンストラクタを強制的に生成することができます。 キーワード default を使用して、暗黙的に宣言された移動コンストラクタを強制的に生成することができます。
どのように解決するのですか?
15.4/14(例外仕様)が答えだと思います。
継承するコンストラクタ(12.9)と暗黙的に宣言された特殊メンバ関数(第12項)には 例外指定 . もし
f
が継承するコンストラクタ、または暗黙のうちに宣言されたデフォルトコンストラクタである場合、コンストラクタをコピーしてください。 移動コンストラクタ デストラクタ、コピー代入演算子、移動代入演算子、その暗黙の 例外指定 はタイプ ID を指定します。T
もしT
が許されるのは 例外指定 によって直接呼び出される関数のf
の暗黙の定義によって直接呼び出される関数のf
は、それが直接呼び出す関数が全ての例外を許可している場合、全ての例外を許可します。f
は 例外指定noexcept(true)
は、それが直接呼び出すすべての関数が例外を許さない場合。
基本的にはDoes What You Thinkで、暗黙のうちに宣言された移動コンストラクタは
noexcept
であることが可能です。
関連
-
[解決済み】IntelliSense:オブジェクトに、メンバー関数と互換性のない型修飾子がある
-
[解決済み] 数値定数の前にunqualified-idを付けて、数値を定義することを期待する。
-
[解決済み] C++で、あるコンストラクタを別のコンストラクタから呼び出す(コンストラクタ・チェイニングを行う)ことは可能ですか?
-
[解決済み] explicit キーワードの意味は?
-
[解決済み] Java で、あるコンストラクタを別のコンストラクタから呼び出すにはどうすればよいですか?
-
[解決済み] ムーブセマンティクスとは何ですか?
-
[解決済み] C#でベースコンストラクタを呼び出す
-
[解決済み] あるコンストラクタを別のコンストラクタから呼び出す
-
[解決済み】C/C++の"-->"演算子とは何ですか?
-
[解決済み] なぜデフォルトのmove-assignment/move-constructorがないのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】coutはstdのメンバではない
-
[解決済み】getline()が何らかの入力の後に使用されると動作しない 【重複あり
-
[解決済み] エラーが発生する。ISO C++は型を持たない宣言を禁じています。
-
[解決済み】C++の余分な資格エラー
-
[解決済み】クラスのコンストラクタへの未定義参照、.cppファイルの修正も含む
-
[解決済み] 警告:暗黙の定数変換でのオーバーフロー
-
[解決済み】Eclipse IDEでC++エラー「nullptrはこのスコープで宣言されていません」が発生する件
-
[解決済み] 変数サイズのオブジェクトが初期化されないことがある c++
-
[解決済み】エラー。引数リストに一致するコンストラクタのインスタンスがない
-
[解決済み] noexceptを本当に使うべきはいつですか?