引用小结

来源:互联网 发布:数据走势图 编辑:程序博客网 时间:2024/05/16 12:23

引用

引用小结:

1、  引用在声明的时候必须同时要初始化,否则会出现错误。

int intoneint& rint=intone;

2、  引用是从一而终的,在初始化后不会在指向其他的变量。任何对该引用的付值都是对引用所维系的目标付值,而不是将引用维系到另一个目标上。

3、  由于引用本身不是类型,所以没有引用的指针和引用的引用。可以有指针的引用

4、  用引用传递函数参数与指针的效果一样,传递的是原来的变量或对象,而不是在函数作用域内建立变量或对象的副本

5、  可以利用引用返回多个值

6、  用引用返回值:函数返回值时,要生成一个值的副本。而用引用返回值时,不生成值的副本。

          注意下面的例子:

          float temp;

          float fn1(float r)                                                

            {

                  temp=r*r*3.14;

                   return temp;

 

             }

              float& fn2(float r)

             {

                temp=r*r*3.14;

                return temp;

             }

         void main()

     {

           float a=fn1(5);

           float &b=fn1(5);//warning 因为值传递返回的是值得副本,是一个临时变量,而后再把值赋给该引用b,由于临时变量作用域短暂,所以b面临无效的危险,这样的情况下需要把他付给一个变量后再初始化引用。

           float c=fn2(5);

           float& d=fn2(5);

     另外,不能返回一个局部作用域的变量的引用,这与返回一个局部作用域的指针性质一样严重

7、  函数调用作为左值

8、  const 限定引用

传递指针和引用更大的目的是效率。当一个数据类型很大时,因为传值要复制副本,所以不可取。但是实参可能会被修改的可能,用const来限定实参不被修改。

9         、返回堆中变量的引用

     int * pint=new int;

     if(pint!=null)

     { int & rint=*pint; delete &rint;//当释放内存的时候注意应用的写法}