[英]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.