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 而不是 test 来优化移动操作;检查汇编程序的输出。

于 2013-08-21T00:24:34.127 回答