概述
参考自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++引用所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复