3

C++11 標準のパラグラフ 12.8/15 では、次のように定義されています。

非共用体クラス X の暗黙的に定義されたコピー/移動コンストラクターは、その基底とメンバーのメンバーごとのコピー/移動を実行します。[...]

これは次のことを意味しますか?

struct st {
  int a;
  int b;
  // ...
};

// ...
void do_smt(st tmp) {
  st lala(std::move(tmp));
  // ...
}

// ...
int main(int argc, char* argv[]) {
  st test(1, 2);
  do_smt(std::move(test));
}

移動コンストラクターなしで機能しますか?

4

1 に答える 1

3

はい、移動コンストラクターを指定しなくても機能します。あなたの例では、コンパイラがテストの代わりに lala を初期化することで移動操作を最適化する可能性があります。それについてのアセンブラ出力を確認してください。

于 2013-08-21T00:24:34.127 に答える