博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
右值引用
阅读量:5821 次
发布时间:2019-06-18

本文共 1257 字,大约阅读时间需要 4 分钟。

c++11中引入了右值引用,用&&表示,其中右值引用只能绑定到右值上 ,但可以使用std::move(),或static_cast<T&&>()显式的将左值转换为右值

int &&a=10;   //Ok,绑定到右值上------------------------------------------int a=10;int &&b=a;  //error,右值引用不能绑定到左值-----------------------------------------------------int a=10;int &&b=std::move(a);   //okint &&c=static_cast
(a); //ok

 

int &&a=10;   //Ok,绑定到右值上--------------------------------------------------------int fun(){
return 10;}int &&a=fun(); //ok,函数返回值是临时对象,右值----------------------------------------------------------int a=10;int &&b=a; //error,右值引用不能绑定到左值-----------------------------------------------------int a=10;int &&b=std::move(a); //okint &&c=static_cast
(a); //ok

 

左值引用分两种情况:

1)

int a=10;int &b=a;   //ok,绑定到左值上int &c=10;  //error,不能绑定到右值上

2)

int a=10;const int b=10;      const int &c=a;        //ok,绑定到int型左值const int &d=b;       //ok,绑定到const int型左值const int &e=10;   //ok,绑定到右值

引入右值引用的目的:右值通常是一个临时变量,可以对其做任意修改,右值引用可以避免右值使用时涉及到的临时对象构造,拷贝,析构等,减少内存开支,尤其是大型的动态结构作为右值时。因为我们都知道引用是对源对象的操作,而不是产生一个源对象的副本。所以可以通过函数重载,产生一个参数是右值引用的函数,这样当参数是右值时就会调用右值引用版本的函数,避免了左值传参方式产生副本增加的开销。

例如:

void fun(int a){cout<<1<

 注:虽然右值引用可以作为函数参数,但其在函数内部,被视为左值,所以当你希望在函数内部将其作为右值使用时,需要用上面提到的方法进行转换

  

 

转载于:https://www.cnblogs.com/mrlsx/p/5512547.html

你可能感兴趣的文章
解决pycharm在ubuntu下搜狗输入法一直固定在左下角的问题
查看>>
多线程day01
查看>>
react-native 模仿原生 实现下拉刷新/上拉加载更多(RefreshListView)
查看>>
MySQL出现Access denied for user ‘root’@’localhost’ (using password:YES)
查看>>
通过Roslyn构建自己的C#脚本(更新版)(转)
查看>>
红黑树
查看>>
UIImagePickerController拍照与摄像
查看>>
python调用windows api
查看>>
第四章 mybatis批量insert
查看>>
Java并发框架——什么是AQS框架
查看>>
【数据库】
查看>>
Win配置Apache+mod_wsgi+django环境+域名
查看>>
linux清除文件内容
查看>>
WindowManager.LayoutParams 详解
查看>>
find的命令的使用和文件名的后缀
查看>>
Android的Aidl安装方法
查看>>
Linux中rc的含义
查看>>
曾鸣:区块链的春天还没有到来| 阿里内部干货
查看>>
如何通过Dataworks禁止MaxCompute 子账号跨Project访问
查看>>
js之无缝滚动
查看>>