これですか
struct Example {
string a, b;
Example(Example&& mE) : a{move(mE.a)}, b{move(mE.b)} { }
Example& operator=(Example&& mE) { a = move(mE.a); b = move(mE.b); return *this; }
}
これに相当する
struct Example {
string a, b;
Example(Example&& mE) = default;
Example& operator=(Example&& mE) = default;
}
?
ベストアンサー1
はい、どちらも同じです。
しかし
struct Example {
string a, b;
Example(Example&& mE) = default;
Example& operator=(Example&& mE) = default;
}
このバージョンでは、本文の定義をスキップできます。
ただし、宣言する際にはいくつかのルールに従う必要がありますexplicitly-defaulted-functions
。
8.4.2 明示的にデフォルト設定された関数 [dcl.fct.def.default]
次の形式の関数定義:
attribute-specifier-seqopt decl-specifier-seqopt declarator virt-specifier-seqopt = default ;
は明示的にデフォルト定義。明示的にデフォルト設定された関数は
特別なメンバー関数である、
宣言された関数型が同じである(ただし、異なる可能性がある)ref 修飾子ただし、コピーコンストラクタまたはコピー代入演算子の場合、パラメータ型は「非constへの参照
T
」(T
メンバー関数のクラス名)となり、暗黙的に宣言されているかのようになる。デフォルトの引数はありません。