相关疑难解决方法(0)

std :: move和std :: forward之间有什么区别

我在这里看到了这一点: Move Constructor调用基类Move Constructor

有人能解释一下:

  1. 之间的差std::movestd::forward,优选用一些代码示例?
  2. 如何轻松思考,何时使用哪个

c++ perfect-forwarding c++11

155
推荐指数
4
解决办法
4万
查看次数

在派生对象上移动构造函数

当你有一个带有移动构造函数的派生对象,并且基础对象也有移动语义时,从派生对象移动构造函数调用基础对象移动构造函数的正确方法是什么?

我首先尝试了最明显的事情:

 Derived(Derived&& rval) : Base(rval)
 { }
Run Code Online (Sandbox Code Playgroud)

但是,这似乎最终调用了Base对象的复制构造函数.然后我尝试std::move在这里明确使用,像这样:

 Derived(Derived&& rval) : Base(std::move(rval))
 { }
Run Code Online (Sandbox Code Playgroud)

这有效,但我很困惑为什么这是必要的.我以为std::move只返回一个右值引用.但是因为在这个例子rval中已经是一个右值引用,所以调用std::move应该是多余的.但如果我不在std::move这里使用,它只是调用复制构造函数.那么为什么要求std::move必要?

c++ move-semantics c++11

45
推荐指数
1
解决办法
1万
查看次数

标签 统计

c++ ×2

c++11 ×2

move-semantics ×1

perfect-forwarding ×1