c++引用详解
铺垫:
变量名实质上是一段连续存储空间的别名,是一个标号
程序中通过变量来申请并命名内存空间
通过变量的名字可以使用存储空间
(能不能再名字的基础上在起个名字?)
概念:
1) 可以看做一个已定义变量的别名
引用是c++的语法范畴,不能再用c语言的思想去思考问题(间接修改)
属于c++编译器对c的扩展
引用做函数参数
引用的意义
引用作为其他指针变量的别名而存在,因此在一些场合可以替代指针
引用相对于指针来说具有更好的可读性和实用性
引用的本质
c++编译器背后做了什么工作
单独定义的时候必须初始化--->很像常量
1)引用在c++内部实现是一个常指针
2)c++编译器在编译过程中使用常指针作为引用的内部实现,因此引用所占的空间与指针相同
3)从使用的角度,引用会让人误会其只是一个别名,没有自己的储存空间,这是c++为了实用性做出的细节隐藏.
结论 :当我们使用引用的语法时,我们不用去关心编译器引用是怎么做了
当我们分析奇怪的语法现象时,才去考虑编译器是怎么做的
函数返回值是引用(引用当左值)
c++引用使用时的难点:
当函数返回值为引用时,
若返回栈变量 ,不能成为其他引用的初始值,不能作为左值使用
若返回静态变量或全局变量 可以成为其他引用的初始值.
即可作为右值使用,也可作为左值使用
指针的引用
c++中的const常量
可能分配内存空间,也可能不分配
当const常量为全局,并且需要在其他文件中使用,会分配空间
在使用&操作符,取const常量的地址,会分配
当const修饰引用,会分配
结论:
const &int e==const int* const e
普通引用==int const e
当使用常量对const引用进行初始化时,编译器会为常量值分配空间,并用引用名作为这段空间的别名
使用字面量对const引用初始化后,将生成一个只读变量