C++《引用》总结(不走弯路)

  1. 引用的概念
    1)引用是个别名,当建立引用时,程序用另一个对象或变量的名字初始化它,即:“引用在声明时必须初始化,否则会产生编译错误”。
    2)对引用的改动实际上就是对目标的改动,引用仅仅是个别名
    3)引用不是值,不占存储空间,声明引用时,目标的存储状态不会改变。所以,既然定义的概念中有具体分配空间的含义,那么引用只有声明,没有定义。而且引用自身没有地址,寻找引用的地址(& rInt)指的是目标的地址
    4)引用运算符“&”只在声明时使用,且放在类型名后面,例如 int & rInt = intone;
    其他任何时候使用引用运算符“&”都指的是取地址操作符;例如 int * pInt = & rInt;这里“&”表示取rInt变量的地址(如果该变量是引用变量,则表示该引用变量目标变量的地址)
    5)引用的合法声明:int & rInt ;int& rInt;int &rInt;注意:一个“&”后面只能匹配声明一个引用变量,例如:int & rone ,rtwo;表示声明了一个int类型的引用变量rone和一个int型变量rtwo,而int & rone,& rtwo;才表示声明两个int类型的引用变量rone和rtwo;
    6)引用一旦初始化,它就维系在一定的目标上,再也分不开,任何对该引用变量的赋值都是对引用所维系的目标赋值,而不是将引用维系到另一个目标上,所以在建立引用时必须初始化并且绝对不会再指向其他不同的变量。
    7)传递引用给函数参数与传递指针的效果一样,传递的是原来的变量或对象,而不是在函数作用域内建立变量或对象的副本(复制)。每当使用引用时,C++就去求该引用所含地址中的变量值。
    8)使用引用需要注意的地方:在函数调用过程中如 :func(a,b);语句会出现误解,形参变量看不清是引用调用还是一般变量调用,这两种调用的结果可能会对程序造成巨大的错误,因为其原理是一个是传值方式(不影响原变量的值),一个是传址方式(能改变原变量);而在面向对象编程中,可能会导致重载函数出错。
    9)不要用一个函数的返回值来初始化引用变量:因为函数的返回值是储存在函数作用域的临时变量里的,而对于一个临时变量或对象的生命期在一个完整的函数语句表达式结束后便宣告结束。所以引用以后的值是个无法确定的值,虽然有一些编译器规定如果临时变量或对象作为引用的初始化时,则其生命期与该引用一致,但这样的程序依赖于编译器的具体实现,所以可移植性是差的。
    10)函数中局部变量的指针和引用均不能作为返回值;
    11)函数可以返回一个引用,使得函数调用表达式成为左值表达式,但要避免及不变的的地址返回。

你可能感兴趣的:(C++学习笔记)