C++温故补缺:引用类型

Posted Tenerome

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++温故补缺:引用类型相关的知识,希望对你有一定的参考价值。

引用类型

c++增加引用类型的概念,定义方法int &b=a;表示引用类型,引用类型相当于变量的别名,地位和被引用的变量相同,int &b=a;,执行后,变量a和b有相同的值和地址,相当于一个地址的内容有两个标签

必须在定义时用,如果在定义后,int b;&b=a就不是引用了,而是取地址

类似于指针的定义和取内容,int *p;定义指针,*p取指针p的内容

C++引用和指针

  • 不存在空引用。引用必须连接到一块合法的内存。
  • 一旦引用被初始化为一个对象,就不能被指向到另一个对象。指针可以在任何时候指向到另一个对象。
  • 引用必须在创建时被初始化。指针可以在任何时间被初始化。

左值、右值与引用

参考:C语言中文网.

C++的左值和右值是从C语言继承过来的,左值的英文简写是"lvalue",右值是"rvalue"。但是他们并不是"left"和"right"。左值的本意是"loactor value",即"可定位的值",也就是存储在内存中、有明确的存储地址的数据,或者说可寻址的数据。而右值"read value",指仅提供数值的数据,不一定可以寻址,如存储在寄存器中的数据。

通常,简单区分左值右值就看赋值号(=)的左右侧,能放在左侧的就是左值,能放在右侧的是右值。所以就有既能做左值又能做右值的。

如:

int a=1;
int b=a;

变量a仅能放在左边,也能放右边,而数值1只能放右边,就是右值。

另外一个例子:const修饰的类型不能再修改值,本质就是不能做左值了。

右值引用[C++ 11新增]

在C++98/03中,就有引用,用‘&’表示,但是不能对数值引用只能引用定义好的变量。

int a=10;
int &b=a;
//int &c=10;  不能这么用

但是可以给常量左值引用赋数值

const int &a=10;

因为const关键字把locator value变成read value,所以可以将数值赋给常量左值引用

C++ 11中添加新的引用方式:右值引用,用“&&”表示

右值引用也必须定义时初始化,但右值引用初始化不能是左值,只能是右值。

int &&a=10;
//int b=1; int &&a=b;  是不行的

右值引用,用别名更容易理解,int &&a=10;,是给数值10起个别名叫做a。而且,a的值是可以修改的。

意义:主要用于移动构造函数,避免不必要的深拷贝,提高程序运行效率。

以上是关于C++温故补缺:引用类型的主要内容,如果未能解决你的问题,请参考以下文章

2019/5/12 查漏补缺

查漏补缺——java多态

再看Java之温故知新(体系篇)

温故而知新-String类

重温HTML标签——温故而知新~~

温故知新:老铁,WeakReference了解一下?