一.左值引用
首先介绍一下引用,通俗来讲就是取了一个别名,比如我叫狗头,你也可以叫我沙漠死神。
一.1引用必须初始化
不初始化就报错了
一.2一个变量可以有多个引用
一.3引用一旦引用一个实体,再不能引用其他实体
一.4const的使用
取别名的原则:对引用实体变量,引用的权限(主要指读写权限)只能缩小,不能放大。
一.5
传值返回:会有一个拷贝。
引用返回:没有拷贝,直接返回变量的别名。
引用的效率更高。
二.右值引用
右值也是一个数据的表达式,如字面常量,表达式返回值,传值返回的函数的返回值(不能是左值引用返回)。右值不能取地址,不能出现在赋值符号的左边。
关键看能不能取地址
给右值取别名就用右值引用,右值引用是左值了,放在赋值符号的左边了。
右值不能取地址,但是给右值引用后,引用的变量是可以取地址的,并且可以修改!
右值引用存放的地方在栈的附近。
const修饰的左值,只能获取地址,不能赋值。
但是const修饰的左值引用既可以引用左值,又可以引用右值。在没有右值引用的时候就必须采用这种方式了。
右值引用的效率对比
左值
右值
c++11后都支持都提供移动赋值和移动构造(都是让将亡值利用起来)
1、内置类型表达式的右值,纯右值。
2、自定义类型表达式的右值,将亡值。