调用移动构造函数时

jlw*_*jlw 5 c++ constructor c++11

我想知道何时在C++代码中调用move构造函数.

这意味着,我知道当我调用Foo a(b)它时是复制构造函数,那么我有什么代码来调用移动构造函数.

Jos*_*eld 4

移动构造函数只是另一个构造函数。如果您有重载的构造函数,就像重载任何其他函数一样,调用哪个构造函数的选择取决于重载解析的规则。也就是说,当您使用 构造一个对象时Foo a(<some-expression>);,可能有多个可能的构造函数,需要选择一个。

复制构造函数采用一个类型为 的参数const Foo&。此左值引用类型将绑定到表示Foo对象的任何表达式。移动构造函数采用一个类型为 的参数Foo&&。此右值引用将仅绑定到可修改的右值。事实上,在传递可修改的右值的情况下,这种重载将是首选。

这意味着Foo a(<some-expression>);如果表达式<some-expression>是可修改的右值,则将选择移动构造函数。否则选择复制构造函数。可修改的右值通常在表示临时对象(例如,从函数返回的对象)时出现。还可以使用 强制表达式为右值表达式std::move,例如Foo a(std::move(b));