在函数参数中传递右值引用

时间:2018-03-08 18:14:05

标签: c++ move move-semantics

将rvalue引用(Movable&& a)传递给函数时,Movable b(a)会以某种方式触发已删除的复制构造函数。

  

main.cpp:在函数' void func(Movable&&)':   main.cpp:25:16:错误:使用已删除的函数' Movable :: Movable(const Movable&)'可动b(a);

Movable b(std::move(a))有效。从阅读

template< class T >
typename std::remove_reference<T>::type&& move( T&& t ) noexcept;

我不理解Movable&& astd::move(a)之间的区别。以下是一个最小的工作示例。

#include<memory>

class Movable {
public:
    Movable() = default;

    Movable(const Movable&) = delete;
    Movable& operator=(const Movable&) = delete;

    Movable(Movable&& o) {}
};


void func(Movable&& a) {
  Movable b(std::move(a)); // this works
  // Movable b(a); // this doesn't compile
}

int main() {
    Movable A;
    func(std::move(A));
}

0 个答案:

没有答案