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的值是可以修改的。
意义:主要用于移动构造函数,避免不必要的深拷贝,提高程序运行效率。
本文来自博客园,作者:Tenerome,转载请注明原文链接:https://www.cnblogs.com/Tenerome/p/cppreview1.html