C++11 c++;11为什么';这个动作行得通吗?

C++11 c++;11为什么';这个动作行得通吗?,c++11,move,C++11,Move,我已经写了下面的代码。我希望能够在LargeClass的实例之间移动向量的内容。正在使用move构造函数,但我只获取副本,而不是移动 为什么这里的移动语义不能像预期的那样工作 代码: 右值引用在其const表单中没有意义,因为您想要修改它们(您想要“移动”它们)。在C++中创建为“代码> const 的对象是只读内存,从中获取/修改内部资源是不可能的。 移动构造函数的语法应为 class\u name(class\u name&&) 因此,请使用: LargeClass(LargeClass

我已经写了下面的代码。我希望能够在
LargeClass
的实例之间移动向量的内容。正在使用move构造函数,但我只获取副本,而不是移动

为什么这里的移动语义不能像预期的那样工作

代码:


右值引用在其
const
表单中没有意义,因为您想要修改它们(您想要“移动”它们)。在C++中创建为“代码> const <代码>的对象是只读内存,从中获取/修改内部资源是不可能的。
移动构造函数的语法应为

  • class\u name(class\u name&&)
因此,请使用:


LargeClass(LargeClass&&rhs)

虽然采用
const-LargeClass&&
的构造函数在技术上被称为移动构造函数(12.8/3)(这令人费解,但在
[C++11:12.8/3]
中明确说明),但它是相当无用的;不言而喻,您不能从
const
表达式中移动,因为您不能修改
const
对象,移动意味着更改源!特别是,您实际上无法从
const
向量中移动,这就是为什么在这里不会发生这种情况,以及为什么您会看到所看到的

更有用的移动构造函数如下所示:

LargeClass(LargeClass&& rhs)

它在两个地址之间移动内容,但容器的地址保持不变否?移动构造函数的语法应该是
LargeClass(LargeClass&&rhs)
@POW请将此作为答案发布。多么愚蠢的错误。。。谢谢严格地说,它是一个移动构造函数。这不是一个非常有用的方法,但仍然是。@Angew:True(12.8/3),这很奇怪。事实上,move构造函数是被调用的。它只是没有达到OP的期望。
l1 vector address: 0x18ce010
Using LargeClass copy constructor
l1 vector address: 0x18ce010
l2 vector address: 0x18ce070
Using LargeClass move constructor
l1 vector address: 0x18ce010
l2 vector address: 0x18ce070
l3 vector address: 0x18ce0d0
LargeClass(LargeClass&& rhs)