为什么`T(const T&&)`被称为移动构造函数?

时间:2014-06-30 10:28:09

标签: c++ c++11 move-semantics

  

[C++11: 12.8/3]: class X的非模板构造函数是移动构造函数,如果其第一个参数是typeX&&const X&&volatile X&&或{{ 1}},并且没有其他参数,或者所有其他参数都有默认参数(8.3.6)。 [..]

为什么构造函数采用const volatile X&&右值引用称为"移动构造函数"按标准?当然it's self-evident this prohibits meaningful move semantics除了最边缘的情况以外it's basically useless

"根据我的说法,正如所说的那样,const不应被视为"移动构造函数"因此,{{3}}。

如果任何,它不应该被称为复制构造函数吗?

1 个答案:

答案 0 :(得分:9)

以下是移动构造函数和其他构造函数之间的一些区别:

  • 移动构造函数可以默认
  • 移动构造函数不会阻止类型成为“文字类型”
  • 非平凡的移动构造函数阻止类型成为“平凡的可复制类型”
  • 移动构造函数可防止生成隐式移动构造函数
  • 移动构造函数可以由标准库函数自动调用

据我所知,对于所有这些,不调用X(const X &&)移动构造函数会产生不良结果。

您提供了另一种选择:它可能被称为复制构造函数。这似乎也有不良结果:它会抑制隐式复制构造函数。

移动构造函数是否实际移动无关紧要。 POD类型也可以有移动构造函数。它只是制作副本,但它仍然被称为移动构造函数。