我在这里看到了这一点: Move Constructor调用基类Move Constructor
有人能解释一下:
std::move和std::forward,优选用一些代码示例?当你有一个带有移动构造函数的派生对象,并且基础对象也有移动语义时,从派生对象移动构造函数调用基础对象移动构造函数的正确方法是什么?
我首先尝试了最明显的事情:
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必要?