C++ 隐式移动构造函数

C++ 隐式移动构造函数,c++,c++11,move-semantics,C++,C++11,Move Semantics,隐式move构造函数到底在做什么?例如,对于以下类,隐式move构造函数是什么样子的(您能否提供此隐式构造函数的一些示例实现): 实施情况是否如下所示: B(B && other) : A(std::move(other)), b(std::move(other.b)), c(std::move(other.c)) {} 从cppreference.com: 对于联合类型,隐式定义的移动构造函数复制 对象表示(如std::memmove)。对于非并集类类型 (类和结构),移动构

隐式move构造函数到底在做什么?例如,对于以下类,隐式move构造函数是什么样子的(您能否提供此隐式构造函数的一些示例实现):

实施情况是否如下所示:

B(B && other) : A(std::move(other)), b(std::move(other.b)), c(std::move(other.c)) {}
从cppreference.com:

对于联合类型,隐式定义的移动构造函数复制 对象表示(如std::memmove)。对于非并集类类型 (类和结构),移动构造函数执行完全成员操作 移动对象的基础和非静态成员,在其 初始化顺序,使用带有xvalue的直接初始化 论点如果满足constexpr的要求 构造函数,生成的移动构造函数是constexpr

基类构造函数在派生构造函数之前运行。

来自cppreference.com:

对于联合类型,隐式定义的移动构造函数复制 对象表示(如std::memmove)。对于非并集类类型 (类和结构),移动构造函数执行完全成员操作 移动对象的基础和非静态成员,在其 初始化顺序,使用带有xvalue的直接初始化 论点如果满足constexpr的要求 构造函数,生成的移动构造函数是constexpr


基类构造函数在派生类构造函数之前运行。

请用您对所追求的实现的最佳猜测更新您的问题。您的
A
类没有定义构造函数。我想那些
B
s应该是
A
?是的,当然是我的错误。我想你的猜测几乎是正确的。(除了缺少的部分之外还有
)。请用您对所要实现的最佳猜测更新您的问题。您的
A
类没有定义构造函数。我想那些
B
s应该是
A
?是的,当然是我的错误。我想你的猜测几乎是正确的。(除了缺少的
部分之外,还有
)。换句话说,给定数据成员类型,只需一个副本即可还有,这是标准。你能在回答中写下隐式move构造函数的实现应该是什么样子吗?@michalt38:这不是语言的工作原理。因为隐式定义的构造函数是由编译器直接生成的,而不是通过编写“显式”实现然后对其进行编译。也许你想问一个显式移动构造函数的例子,它将等价于隐式定义的一个?@ MICHALT38。C++标准只是定义默认移动构造函数的行为。编译器不会像平常那样写下普通C++语法中的一个移动构造函数,然后编译它。我所能做的就是为您编写一个行为与默认行为相同的移动构造函数。但这有什么意义呢?换句话说,给定数据成员类型,只需一个副本即可还有,这是标准。你能在回答中写下隐式move构造函数的实现应该是什么样子吗?@michalt38:这不是语言的工作原理。因为隐式定义的构造函数是由编译器直接生成的,而不是通过编写“显式”实现然后对其进行编译。也许你想问一个显式移动构造函数的例子,它将等价于隐式定义的一个?@ MICHALT38。C++标准只是定义默认移动构造函数的行为。编译器不会像平常那样写下普通C++语法中的一个移动构造函数,然后编译它。我所能做的就是为您编写一个行为与默认行为相同的移动构造函数。但这有什么意义呢?
B(B && other) : A(std::move(other)), b(std::move(other.b)), c(std::move(other.c)) {}