C++ 隐式移动构造函数
隐式move构造函数到底在做什么?例如,对于以下类,隐式move构造函数是什么样子的(您能否提供此隐式构造函数的一些示例实现): 实施情况是否如下所示: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)。对于非并集类类型 (类和结构),移动构
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)) {}