引用及const引用

来源:互联网 发布:钉钉打卡机mac地址 编辑:程序博客网 时间:2024/04/30 07:59

关于引用:

    引用和类一样,是C++中的重要概念,主要用于参数传递,使用引用传递而不是值传递,可在语言级提高程序的效率

概念:

     引用就是对象另一个名字。引用是一种复合类型(所谓复合类型,是指用其他类型定义的类型如指针,引用等都是符合类型),通过在变量名前添加“&”符合来定义。这就是说每一种引用类型都关联到某一其他类型。

    引用在定义时必须用同类型对象进行初始化。看如下错误代码:

           int &ref1=12;//error:12是字面值(没有地址),不是对象

           int &ref2  ;//error:没有初始化
           double dval=3.14;
           int &ref3=dval;//error:不是同类型的,这个同类型严格的同类型,虽然存在double类型到int类型的转换。

  但是看以下代码:

         const int &ref4=12;//ok

         const int &ref5=dval;//ok

矛盾出现,不是说只能用同类型对象初始化么?难道const引用不是这样的?

    事实上,const引用同样不是例外。只是情况变的有些复杂:const int &ref4=12;//ok

引用ref4指向了编译器创建了一个用自面值12初始化的临时对象。一般情况下,临时对象的生命期持续到全表达式结束,但在const引用时,临时对象与引用共存亡即意味着该引用一直存在,直到该对象超出作用域。

同样   const int &ref5=dval;//ok    编译器同样创建了一个临时对象,它(编译器而不是你)会把该语句转换如下代码:

   int temp=dval;

   const int &ref5=temp;

所以实际上仍旧是同类型的对象进行初始化的。

原创粉丝点击