码迷,mamicode.com
首页 > 编程语言 > 详细

C++左值引用和右值引用

时间:2018-04-05 16:49:34      阅读:205      评论:0      收藏:0      [点我收藏+]

标签:blog   左值   本质   简单的   问题:   声明   包括   pos   一个   

1.左值和右值概念:
左值是可以放在赋值号左边可以被赋值的值:左值就是指在表达式使用完之后仍存在的对象(存储空间);
右值当在赋值号右边去除值赋给其他变量的值:右值可以在内存也可以在CPU寄存器。
可以简单的认为左值就是具有名称的对象,所有的变量(包括const修饰的变量)都是左值。而右值指的是那些在表达式使用完之后就不再存在的存储空间,实际上所有的临时变量表达式都是右值:如下解释了左值和右值的区别:
int x=3+4;//x是左值,3+4是右值,3+4的结果存放在临时对象中,在表达式之外这些空间都是不可访问的。

一个对象被用作右值时,使用的是它的内容(值),被当作左值时,使用的是它的地址。

2.引用
引用是C++语法做的优化,引用的本质还是靠指针来实现的。引用相当于变量的别名。
引用可以改变指针的指向,还可以改变指针所指向的值。
引用的基本规则:
1)声明引用的时候必须初始化,且一旦绑定,不可把引用绑定到其他对象;即引用必须被初始化,不能对引用重新定义;
2)对引用的一切操作,就相当于对原对象的操作。
3.左值引用和右值引用:
左值引用的基本语法: type &引用名=左值表达式;
右值引用的基本语法:type &&引用名= 右值表达式;
4.右值引用用来解决以下两种问题:
1)移动语义:
移动语义允许程序员将资源(比如动态分配内存)从一个对象移动到另一个对象,这将大大提高程序的性能,注意这里是移动而非复制。右值引用可以支持移动语义,是因为 它允许资源从临时对象移动出来,而初次之外是无法引用临时对象(右值)的。
当对右值进行操作时,右值本身往往没有必要保留,因此在有些情况下,右值资源可以直接移动给其他对象。通过右值引用,程序可以明确的区分出传入的参数是否为右
值,从而避免不必要的复制,因而可以提高程序的效率。下面考虑std库内的实现数据交换的swap()函数,假设X是一个已经实现备份构造函数即备份赋值运算符的类:
template

C++左值引用和右值引用

标签:blog   左值   本质   简单的   问题:   声明   包括   pos   一个   

原文地址:https://www.cnblogs.com/myliuliu/p/8723182.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!