使用`std::move()`时,左值引用的变量会强制转换为右值引用,移动后,原变量的状态会发生变化

使用`std::move()`时,左值引用的变量会强制转换为右值引用,从而实现可移动语义。在移动前,原变量的值是未定义的,在移动后,原变量的状态会发生变化。 具体而言,移动后,被移动的资源会被移动到新的对象中,原对象会成为空对象,即对它进行操作时不会有预定的行为。例如,在移动了一个`std::vector`对象后,原对象中的所有元素都会被移动到了新的对象中,而原对象的大小和容量都会为0,并且保证不会直接访问原对象的元素。 以下是一个使用`std::move()`进行移动的示例代码:

```
 

#include <iostream>

#include <vector>

int main() {

std::vector<int> v1 {1, 2, 3};

std::vector<int> v2 = std::move(v1);

std::cout << "v1 size: " << v1.size() << ", v1 capacity: " << v1.capacity() << std::endl; std::cout << "v2 size: " << v2.size() << ", v2 capacity: " << v2.capacity() << std::endl;

return 0;

}

```

运行以上代码,输出结果如下:

```

v1 size: 0, v1 capacity: 0 v2 size: 3, v2 capacity: 3 `

``

在以上代码中,首先创建了一个`std::vector`对象v1,并赋值了一些元素。然后,使用`std::move()`将v1移动到了新的对象v2中。最后,输出了v1和v2的大小和容量。 可以看到,移动后,原来的v1变成了空对象,大小和容量都为0,而v2获取了原来v1的所有元素,大小和容量也不变。这说明,使用`std::move()`后,原变量的状态会发生变化。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值