繁体   English   中英

C++ 移动没有右值引用的构造函数?

[英]C++ move constructors without rvalue references?

我刚刚在 Boost 中找到了一些代码,解释如下:

class A {};

class B {
public:
  B(A a): a_(std::move(a)) {}
private:
  A a_;
};

int main() {
  A a;
  B b(std::move(a));
}

假设这可行,为什么要使用带有右值引用的移动构造函数/赋值? 还是移动构造函数/赋值只是为您省去了第二次std::move()调用的麻烦?

C++ 移动没有右值引用的构造函数?

B(A)不是移动构造函数。 它是一个转换构造函数。

假设这有效

这个转换构造函数确实有效。

为什么将移动构造函数/赋值与右值引用一起使用?

因为没有右值引用就不能有移动构造函数/赋值。

如果您想问,为什么要使用右值引用转换构造函数:它可以避免一步构造。 这样做的缺点是需要对左值引用进行额外的重载,以防您希望能够从中复制。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM