[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}}。
如果任何,它不应该被称为复制构造函数吗?
答案 0 :(得分:9)
以下是移动构造函数和其他构造函数之间的一些区别:
据我所知,对于所有这些,不调用X(const X &&)
移动构造函数会产生不良结果。
您提供了另一种选择:它可能被称为复制构造函数。这似乎也有不良结果:它会抑制隐式复制构造函数。
移动构造函数是否实际移动无关紧要。 POD类型也可以有移动构造函数。它只是制作副本,但它仍然被称为移动构造函数。