首页 > 解决方案 > 将仅移动对象作为 r 值引用参数与无引用参数传递 - 有什么区别?

问题描述

只移动对象可以作为右值引用参数和常规无引用参数传递给函数。这两种情况有什么区别?

请参阅以下示例中的 noRValueReference 和 rValueReference:

struct MoveOnly {
  MoveOnly() = default;
  MoveOnly(MoveOnly&&) = default;
  MoveOnly& operator=(MoveOnly&&) = default;
  MoveOnly(const MoveOnly&) = delete;
  MoveOnly& operator=(const MoveOnly&) = delete;
};

void noRValueReference(MoveOnly val) {}
void rValueReference(MoveOnly&& val) {}

int main() {
    MoveOnly a, b;
    noRValueReference(std::move(a));
    rValueReference(std::move(b));
}

标签: c++11

解决方案


推荐阅读