详解C++移动语义std::move()

本文详细介绍了C++中的Move语义,包括std::move的概念、特点,以及左值、右值和左值引用、右值引用的区分。std::move的作用在于将对象的状态转移,而非复制,提高效率。通过std::move,可以将左值引用转换为右值引用,进而利用右值引用进行高效的操作,例如在向容器中插入元素时避免不必要的拷贝。此外,文章还讨论了std::move的实现原理和使用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

目录

1. C++move的概念

2. C++move的特点

3. 左值、右值与左值引用、右值引用

3.1 左值和右值的概念

3.2 左值引用和右值引用

4. std::move详解

4.1 std::move简介

4.2 std::move详解

4.3 std::move实现:

4.4 std::move的优点

4.5  std::move的使用


参考:

https://blog.csdn.net/s11show_163/article/details/114296006

https://blog.csdn.net/daaikuaichuan/article/details/88371948
https://zhuanlan.zhihu.com/p/94588204
https://www.cnblogs.com/SZxiaochun/p/8017475.html
https://www.cnblogs.com/yoyo-sincerely/p/8658075.html
左值引用与右值引用,以及为什么右值引用本身是左值的问题详见:https://www.cnblogs.com/char-cheng/p/11026936.html

1. C++move的概念

一句话概括std::move ———— std::move是将对象的状态或者所有权从一个对象转移到另一个对象,只是转移,没有内存的搬迁或者内存拷贝。

2. C++move的特点

  1. std::move函数可以以非常简单的方式将左值引用转换为右值引用。(左值、左值引用、右值、右值引用 参见:http://www.cnblogs.com/SZxiaochun/p/8017475.html)
  2.  通过std::move,可以避免不必要的拷贝操作。
  3. std::move是为性能而生。
  4. std::move是将对象的状态或者所有权从一个对象转移到另一个对象,只是转移,没有内存的搬迁或者内存拷贝。
  5. 如string类在赋值或者拷贝构造函数中会声明char数组来存放数据,然后把原string中的 char 数组被析构函数释放,如果a是一个临时变量,则上面的拷贝,析构就是多余的,完全可以把临时变量a中的数据直接 “转移” 到新的变量下面即可。

3. 左值、右值与左值引用、右值引用

右值引用(及其支持的Move语意和完美转发)是C++0x加入的最重大语言特性之一。从实践角度讲,它能够完美解决C++中长久以来为人所诟病的临时对象效率问题。从语言本身讲,它健全了C++中的引用类型在左值右值方面的缺陷。从库设计者的角度讲,它给库设计者又带来了一把利器。从库使用者的角度讲,不动一兵一卒便可以获得“免费的”效率提升。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

子木呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值