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

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

1.左值和右值

可以取地址的值就是左值,左值通常带名字;

不可以取地址的值就是右值,右值通常匿名

#include 
using namespace std;int& foo (int& a) { return a;}int bar (int& a) { return a;}int main (void) { // 左值,可取地址 int a, b = 0; cout << &a << endl; // 有名变量 cout << &foo (a) << endl; // 引用形式的函数返回值 cout << &++a << endl; // 前缀自增减表达式的值 cout << &(a=b) << endl; // 赋值类表达式的值 /* 右值,不可取地址 cout << &10 << endl; // 字面值常量 cout << &bar (a) << endl; // 值形式的函数返回值 cout << &a++ << endl; // 后缀自增减表达式的值 cout << &(a+b) << endl; // 运算表达式的值 cout << &(double)a << endl; // 类型转换表达式的值 */ /* 所有的右值天然具备只读属性 10 = 10; bar (a) = a; a++++; a+b=10; (double)a = 1.23; */ // 以上右值亦称纯右值,另一种右值称为将亡右值 return 0;}

2.左值引用和右值引用

(1)左值引用只能引用左值,不能引用右值

类型 &左值引用=左值

int a;

int &lvr=a;
int &lvr=10;//error

(2)右值引用只能引用右值,不能引用左值

类型 &&右值引用=右值;

int a;

int &&rvr=10;
int &&rvr=a; //error

(3)常左值引用,万能引用,既能引用左值,也可以引用右值

int a;

int const &lvr=10;
int const &lvr=a;

(4)任何临时值只具语句级生命周期,引用可将其寿命延长,延长至和该引用的生命期一样

#include 
using namespace std;class A {public: A (void) { cout << "A构造:" << this << endl; } A (A const& that) { cout << "A拷贝:" << &that << "->" << this << endl; } ~A (void) { cout << "A析构:" << this << endl; }};A foo (void) { A a; return a;}int main (void) { int a = 1, b = 2; int& lvr1 = a; /* 左值引用不能引用右值 int& lvr2 = a + b; */ int&& rvr1 = a + b; /* 右值引用不能引用左值 int&& rvr2 = a; */ int const& clvr1 = a; int const& clvr2 = a + b; cout << "-------- 1 --------" << endl; foo (); cout << "-------- 2 --------" << endl; A&& rvra = foo (); // rvra ... cout << "-------- 3 --------" << endl; return 0;}

 

3.通用引用

(1)在函数模板隐式推断过程中,若实参为左值,则T&&被推断为左值引用,若实参为右值,则T&&被推断为右值引用,这样的引用被称为通用引用

(2)只有T&&才是通用引用,加了const就不是了

转载于:https://www.cnblogs.com/LuckCoder/p/8668113.html

你可能感兴趣的文章
c# 第29节 类
查看>>
「教程」Android手机如何通过USB使用电脑宽带上网(测试手机:Moto XT800)
查看>>
Servlet表单处理
查看>>
第二周笔记
查看>>
WordPress在线安装插件
查看>>
overflow:scroll 滚动条不显示
查看>>
C语言函数指针和回调函数
查看>>
hdu 1058 Humble Numbers (DP)
查看>>
hdu 3307 Description has only two Sentences (欧拉函数+快速幂)
查看>>
align-items和align-content的区别
查看>>
POJ 2255 Tree Recovery【二叉树重建】
查看>>
别盯着杯子
查看>>
Divide Two Integers
查看>>
MPlayer-2016 最新版本
查看>>
HTML5:Canvas-基本用法
查看>>
{WP7/WP8·获取屏幕大小}
查看>>
Java面向对象(构造方法、this、super)
查看>>
Mysql中的索引问题
查看>>
如何调用windows phone 7.1的后台闹钟功能 step by step
查看>>
多进程(了解):守护进程,互斥锁,信号量,进程Queue与线程queue(生产者与消费者模型)...
查看>>