左值、左值引用、右值、右值引用

1、左值和右值的概念

左值是可以放在赋值号左边可以被赋值的值;左值必须要在内存中有实体;
         右值当在赋值号右边取出值赋给其他变量的值;右值可以在内存也可以在CPU寄存器。
         一个对象被用作右值时,使用的是它的内容(值),被当作左值时,使用的是它的地址

2、引用

引用是C++语法做的优化,引用的本质还是靠指针来实现的。引用相当于变量的别名。

引用可以改变指针的指向,还可以改变指针所指向的值。

引用的基本规则:

  1. 声明引用的时候必须初始化,且一旦绑定,不可把引用绑定到其他对象;即引用必须初始化,不能对引用重定义
  2. 对引用的一切操作,就相当于对原对象的操作。

3、左值引用和右值引用

3.1 左值引用
         左值引用的基本语法:type &引用名 = 左值表达式;

3.2 右值引用

右值引用的基本语法type &&引用名 = 右值表达式;

右值引用在企业开发人员在代码优化方面会经常用到。

右值引用的“&&”中间不可以有空格。

时间: 2024-10-09 00:24:30

左值、左值引用、右值、右值引用的相关文章

c++ 右值左值

左值右值 名词 左值:lvalue,left value 右值:rvalue,right value C语言 这两个名词是从C语言继承过来的,C语言中为了帮助记忆:左值可以出现在赋值语句的左侧,右值则不能. C++ 在C++语言中,二者的区别就没那么简单了.C++的表达式要不然就是左值,要不然就是右值,不存在黑户. 一个左值表达式的求值结果是一个对象或者一个函数,然而以常量对象为代表的某些左值实际上不能作为赋值语句的左侧运算对象.此外,虽然某些表达式的求值结果是对象,但它们是右值而非左值. 可以

Oracle表与表之间的连接方式(内连接:inner join 、外连接 全连接: full outer join、左连接:left outer join 、右连接:right outer join、自然连接:natural join)

1 --内连接:INNER JOIN 它表示返回两个表或记录集连接字段的匹配记录,表示两个表中相互包含的部分 2 select * from student inner join sc on student.sno=sc.sno; 3 --外连接(全连接):包含左.右两个表的全部行,不管另外一边的表中是否存在与它们匹配的行.不符合条件的,以空值代替. 4 --全连接:表示两个表组合在一起,左右不相匹配时使用空值替换 5 select * from student full outer join

将引用作为函数返回值的优缺点

格式:类型标识符 &函数名(形参列表及类型说明){ //函数体 }好处:在内存中不产生被返回值的副本:(注意:正是因为这点原因,所以返回一个局部变量的引用是不可取的.因为随着该局部变量生存期的结束,相应的引用也会失效,产生runtime error!注意事项:(1)不能返回局部变量的引用.这条可以参照Effective C++[1]的Item 31.主要原因是局部变量会在函数返回后被销毁,因此被返回的引用就成为了"无所指"的引用,程序会进入未知状态.(2)不能返回函数内部new

转: 引用作为函数返回值

转自:http://blog.csdn.net/vivi_wang_11/article/details/7437382 函数返回值时,要生成一个值的副本.而用引用返回值时,不生成值的副本. 例如,下面的程序是有关引用返回的4种形式: //********************* //** ch9_6.cpp ** //********************* #include <iostream.h> float temp; float fn1(float r) { temp = r*r

为什么 Java 只有值传递,但 C# 既有值传递,又有引用传递,这种语言设计有哪些好处?

为什么 Java 只有值传递,但 C# 既有值传递,又有引用传递,这种语言设计有哪些好处? http://www.zhihu.com/question/20628016 Java值传递的终极解释 http://developer.51cto.com/art/201103/251163.htm

引用传递也是值传递

其实之前就懂这个东西,但今天突然就想写下来记录一下. 1.首先说 aa作为对象的引用传入swap函数,则对aa的内部操作确实可以影响到外部a的引用指向的值. 但b传入的引用bb也可以操作b的值,但bb指向了aa,这样一来,bb就跟b指向的不是同一个东西了,所以b的值不会改变. public class TestObject { public int val = 5; public void increase(){ val++; } public static void main(String[]

C++ Primer 学习笔记_17_从C到C++(3)--引用、const引用、引用传递、引用作为函数返回值、引用与指针区别

欢迎大家阅读参考,如有错误或疑问请留言纠正,谢谢 一.引用 1.引用是给一个变量起别名 变量: 名称 空间 引用: 引用不是变量 引用仅仅是变量的别名 引用没有自己独立的空间 引用要与它所引用的变量共享空间 对引用所做的改变实际上是对它所引用的变量的改变 引用在定义的时候必须要进行初始化 引用一经初始化,不能重新指向其他变量 2.定义引用的一般格式: (1)类型  &引用名 = 变量名: (2)例如: int a=1; int &b=a; // b是a的别名,因此a和b是同一个单元 (3)

将引用作为函数返回值的格式、好处和规则

格式: 类型标识符 &函数名(形参列表及类型说明){//函数体} 好处: 在内存中不产生返回值的副本(返回一个局部变量的引用是不可取的,因为随着局部变量生存周期的结束,相应的引用也会失效,产生runtime error) 注意: 不能返回局部变量的引用,局部变量会在函数返回后被销毁. 不能返回函数内部new分配的内存的引用,虽然不存在局部变量的被动销毁问题,但是函数返回的引用只是作为一个临时变量出现,并没有被赋予一个实际的变量,导致引用所指向的空间无法释放. 可以返回类成员的引用,但最好是con

c++函数参数类型-引用、指针、值 [转载]

在编写个人函数的时候,你将会受到C++中的一条基本的原则的限制:在默认的情况下,变量只能以值传递的方式传递给函数.这句话的意思是:被传递到函数的只是变量的值,永远不是变量的本身. 例如: [cpp] view plaincopyprint? void changeVar(int myVar,int newValue) { myVar=newValue; } int main(){ int myNum=20; changeVar(myNum,90); std::cout<<myNum<&l

C++基础2 引用 函数扩展: 默认值 占位符 指针 重载 类:引用类指针 声明实现分开写

[难点]指针引用 [email protected]:~/c++$ cat main.cpp  #include <stdlib.h> #include "iostream" using namespace std; int a = 20; struct Teacher { int age; char name[64]; }; int fun1(struct Teacher ** p) { int ret = 0; if(p == NULL) { ret = -1; ret