C++中move的使用及说明

 更新时间:2023年08月08日 09:19:44   作者:昔拉天使  
这篇文章主要介绍了C++中move的使用及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

C++ move使用

move作用主要可以将一个左值转换成右值引用,从而可以调用C++11右值引用的拷贝构造函数,在对象拷贝的时候,在运行时,它们不会产生一行代码原先的对象也会清空, 可以减少资源创建和释放。

作为可以归纳为以下几点

1、std::move函数可以以非常简单的方式将左值引用转换为右值引用。

2、通过std::move,可以避免不必要的拷贝操作。

3、std::move是为性能而生。

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

两个地址是独立的,move操作实际上是系统将这一块地址属于哪一个地址的登记改一下,实际上这一块内存根本没有发生任何变化。

打个比方,就好比说一个房产,原来登记在张三名下,“张三”就是地址。张三也有管理权。move就相当于过户。过户给李四后,“李四”就是这个房子的“地址”,管理权自然也交接给了李四。

C++move函数详解

C++11的一个最重要特性就是支持移动语义,其中一个比较关键的函数就是 std::move 那这个函数的作用是什么?

首先打开库文件 找到move的定义:

注意:不要把&&理解成引用的引用,这就是一个关键字

大概函数如下:

template<class T>
remove_reference_t<T>&& move(T && a) noexcept
{
	return static_cast<remove_reference_t<T>&&>(arg);
}

说白了这个函数的作用就是把传进来的参数强制转换成右值引用

可能有些人会有疑问,

为什么参数已经是右值引用了?

这就要说到参数推导了比如以下例子:

template<typename T>
void foo(T&& params);

如果传进来的是一个左值

int a = 10;
foo(a);

此时params被推导为int& 如果传进来的是一个右值

foo(20);

此时paramas被推导为int&&

remove_reference的作用是什么?

就是去掉引用,比如int& 变成int int&&变成 int

也就是说std::move把你传进来的参数所有的引用都去掉,然后在加上&&,也就是变成右值引用

remove_reference是怎么实现的?

非常简单,首先看看定义:

可以看到有了三个模板匹配,不管你传的是什么,我都能去掉你的引用,通过::type得到你原始的类型

其中remove_referenct_t 无非是一个方便的写法 typename是为了说明 remove_reference是一个class

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 详解如何实现C++虚函数调用汇编代码

    详解如何实现C++虚函数调用汇编代码

    多态是C++中最重要的特性之一,对虚函数的调用在C++代码中是随处可见的,本篇文章我们详细探讨一下,感兴趣的朋友快来看看吧
    2021-11-11
  • C语言中常见的六种动态内存错误总结

    C语言中常见的六种动态内存错误总结

    学习过C语言中的动态内存函数,例如【malloc】、【calloc】、【realloc】、【free】,那它们在使用的过程中会碰到哪些问题呢,本本文我们一起来探讨下,感兴趣的朋友跟着小编一起来看看吧
    2023-11-11
  • C++使用ImGUI框架开发一个简单程序

    C++使用ImGUI框架开发一个简单程序

    ImGui 是一个用于C++的用户界面库,跨平台、无依赖,支持OpenGL、DirectX等多种渲染API,下面就跟随小编一起学习一下如何使用ImGUI框架开发一个简单程序吧
    2023-08-08
  • C++算法学习之回溯法的应用

    C++算法学习之回溯法的应用

    这篇文章介绍了C++算法中回溯法的一些应用,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-05-05
  • C++调用Python基础功能实例详解

    C++调用Python基础功能实例详解

    c++调用Python首先安装Python,本文以win7为例,给大家详细介绍C++调用Python基础功能,需要的朋友参考下吧
    2017-04-04
  • C++中typeid实现原理详解

    C++中typeid实现原理详解

    这篇文章主要给大家介绍了关于C++中typeid实现原理的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • C++实现图像压缩的示例代码

    C++实现图像压缩的示例代码

    这篇文章主要为大家详细介绍了如何使用C++实现图像压缩的功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-12-12
  • 利用C++ OpenCV 实现从投影图像恢复仿射特性

    利用C++ OpenCV 实现从投影图像恢复仿射特性

    我们通过相机拍摄的图片存在各种畸变,其中投影畸变使得原本平行的直线不再平行,就会产生照片中近大远小的效果。本文将具体介绍如何利用OPenCV实现从投影图像恢复仿射特性,接下来跟着小编一起学习吧
    2021-11-11
  • 详解C++中的内存同步模式(memory order)

    详解C++中的内存同步模式(memory order)

    这篇文章主要介绍了C++中的内存同步模式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • 仿写C语言string.h头文件检验字符串函数

    仿写C语言string.h头文件检验字符串函数

    这里给大家分享的是一个C语言string.h头文件检验字符串函数的仿写,非常的简单实用,小编觉得这篇文写的还不错,希望能够给你带来帮助
    2021-11-11

最新评论