我是靠谱客的博主 愤怒黄豆,最近开发中收集的这篇文章主要介绍详解c++引用,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

参考自http://my.oschina.net/sasa/blog/7921,此外加上我自己的解释

(1)const和non-const引用

const引用可读不可改,与绑定对象是否为const无关

非const引用可读可改,只可与非const对象绑定


(2)引用可以绑定到哪些对象

非const引用只能绑定到与该引用同类型的对象。

double t = 9.3;
int& k = t;
//error

const引用则可以绑定到不同但相关的类型的对象或绑定到左值。


(3)引用的初始化

1.定义引用时必须进行初始化。初始化是指明引用指向哪个对象的唯一方法。

2.当引用初始化后,只要该引用存在,它就保持绑定到初始化时指向的对象。并且不可能将引用绑定到另一个对象。

 

 关于引用的初始化有两点值得注意:

1)当初始化值是一个左值(可以取得地址)时,没有任何问题;

2)当初始化值不是一个左值时,则只能对一个const T&(常量引用)赋值。而且这个赋值是有一个过程的:

首先将值隐式转换到类型T,然后将这个转换结果存放在一个临时对象里,最后用这个临时对象来初始化这个引用变量。

 

double dval = 3.14;

const int &ri = dval;

编译器会把这些代码转换成如以下形式的编码:

int temp =dval;          // create temporary int from the double

const int &ri = temp;   // bind ri to that temporary

这样做的原因:如果 ri 不是 const,那么可以给 ri赋一新值。这样做不会修改 dval,而是修改了 temp。期望对 ri 的赋值会修改 dval 的程序员会发现 dval 并没有被修改。仅允许 const引用绑定到需要临时使用的值完全避免了这个问题,因为 const 引用是只读的

 (4)具体事例:


const doublet = 9.3;
constint& k = t;
cout<<&k<<endl;
cout<<&t<<endl;

输出是

0012FF6C

0012FF74//使用了临时变量,所以地址不同

 


int t = 9;
int& k = t;
cout<<&k<<endl;
cout<<&t<<endl;

输出是

0012FF74

0012FF74





最后

以上就是愤怒黄豆为你收集整理的详解c++引用的全部内容,希望文章能够帮你解决详解c++引用所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(75)

评论列表共有 0 条评论

立即
投稿
返回
顶部