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语言中变长数组的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • 如何解决C语言,函数名与宏冲突

    如何解决C语言,函数名与宏冲突

    本文介绍了“如何解决C语言,函数名与宏冲突”,需要的朋友可以参考一下
    2013-03-03
  • C 语言进制之间的转换

    C 语言进制之间的转换

    本篇文章主要介绍了C语言进制之间的转换,举例说明并附图片,帮助大家理解,希望对大家有所帮助
    2016-07-07
  • C语言超详细分析多进程的概念与使用

    C语言超详细分析多进程的概念与使用

    在一个项目中并发执行任务时多数情况下都会选择多线程,但有时候也会选择多进程,例如可以同时运行n个记事本编辑不同文本,由一个命令跳转到另外一个命令,或者使用不同进程进行协作
    2022-08-08
  • C语言解决青蛙跳台阶问题(升级版)

    C语言解决青蛙跳台阶问题(升级版)

    所谓的青蛙跳台阶问题,就是指一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。本文将用C语言解决这一问题,需要的可以参考一下
    2022-01-01
  • VC基于ADO技术访问数据库的方法

    VC基于ADO技术访问数据库的方法

    这篇文章主要介绍了VC基于ADO技术访问数据库的方法,较为详细的分析了VC使用ADO操作数据库的相关实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-10-10
  • C++学习心得之扫雷游戏

    C++学习心得之扫雷游戏

    这篇文章主要为大家详细介绍了C++学习心得之扫雷游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-03-03
  • C语言实现图书管理系统

    C语言实现图书管理系统

    这篇文章主要为大家详细介绍了C语言实现图书管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • C语言通过二分查找实现猜数字游戏

    C语言通过二分查找实现猜数字游戏

    这篇文章主要为大家详细介绍了在C语言中如何通过二分查找思想编写一个简单的猜数字游戏,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-02-02
  • c++中const的使用详解

    c++中const的使用详解

    本篇文章是对c++中的const的应用进行了详细的分析介绍,需要的朋友参考下
    2013-05-05

最新评论