引用的概念
引用并非定义一个新的变量,他是给一个已经存在的变量取一个别名,引用的变量和它本身是共用一块空间的。所以引用的存在会减少空间的拷贝,节省空间。引用的使用格式是
类型& 引用别名 = 引用对象;
这里可以看到打印出来的地址都是一样的也就是共用一块空间。
引用的特性
1,规定引用在定义时必须初始化(也就是说取别名的时候首先要存在使用这个别名的人,否则就不成立)
2,一个变量可以有多个引用(也就是类比一个人可以有多个别名)
3,引用一旦引用一个实体,就不能引用其他实体了。
引用的使用
引用在实践中通常用于作为引用传参或者返回值的时候出现,这样会减少拷贝提高效率,还可以通过改变引用对象来达到改变实参的效果。所以引用传参的功能跟指针传参的功能是类似的引用传参会更加方便。
引用传参
引用返回值
const引用
引用一个const对象,必须用const引用。const引用也可以引用普通对象,因为对象的访问权限在引用过程中可以缩小,不可以放大(后面会讲这个缩小放大的问题)
权限放大问题
一般在我们进行类型转换时会产生临时对象用来存储中间值,例如 double d = 12.32
int& b = d;这里在进行类型转换的时候就会选择存储在临时变量中,而c++中的临时对象具有常性,所以这里就不能直接用int& 来接收,不然就会存在权限放大的问题,就必须用const&来接收。
临时对象就是编译器需要一个空间来暂时存储表达式的求值结果而临时创建的一个未命名的对象。c++把这个对象叫做临时对象。例如a*3这个表达式的运算结果就会先存在于临时对象之中
指针和引用的关系
C ++中指针和引用就像两个性格迥的兄弟, 指针是哥哥, 引用是弟弟, 在实践中他们相辅相成, 功能有重叠性, 但是各有自己的特点, 互相不可替代。
语法概念上引用是一个变量的别名不开新空间, 指针是存储一个变量地址, 要开空间。
引用在定义时必须初始化, 指针建议初始化, 但是语法上不是必须的。
引用在初始化时引用一个对象后, 就不能再引用其他对象, 而指针可以在不断地改变指向对象。
引用可以直接访问指向对象, 指针需要解引才是访问指向对象。
sizeof 中含义不同, 引用结果为引用类型的大小, 但指针始终是地址空间所占字节 (32 位平台下占4 个字节, 64 位下是8byte )
·指针很容易出现空指针和野指计的问题, 引用很少出现, 引用使用起来更安全。
以上便是我对引用的全部理解了,谢谢支持。