T类的移动构造函数是非模板构造函数,其第一个参数是T&&,const T&&,volatile T&&和const volatile T&&,并且没有其他参数参数或其余参数都有默认值。
您认为对其他类型进行右值引用的构造函数是什么:
#include <string>
#include <vector>
struct Bar
{
std::string bs;
std::vector<char> bv;
};
struct Foo {
std::string fs;
std::vector<char> fv;
Foo(Bar && b)
: fs(std::move(b.bs))
, fv(std::move(b.bv))
{}
};
答案 0 :(得分:3)
你称之为“构造函数”。
所有类型的函数都可以对类型进行右值引用,就像它们可以使用左值引用,值等一样。当编译器/语言需要特殊处理时,它们只获得特殊名称。并且编译器不会将此构造函数与采用rvalue的任何其他函数区别开来。
虽然一般来说,这样一个构造函数的含义是将从它给出的Bar
移动。实际上,您永远不应该使用不移动(或转发)的右值参考参数。是否将Bar
移动到自身,或者移动是作为创建Foo
的内部数据的辅助操作发生的,或者是构造函数实现的其他内容。