引用 && const 要注意的一些地方
2014-05-01 22:22
183 查看
参考自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)具体事例:
源码打印?<span style="font-size: 18px; "> const doublet = 9.3;
constint& k = t;
cout<<&k<<endl;
cout<<&t<<endl;</span>
输出是
0012FF6C
0012FF74//使用了临时变量,所以地址不同
源码打印?
<span style="font-size: 18px; "> int t = 9;
int& k = t;
cout<<&k<<endl;
cout<<&t<<endl;</span>
输出是
0012FF74
0012FF74
相关文章推荐
- 探讨PHP引用&符号的一些注意问题
- 关于指针、const、typedef、作用域::、引用&的一些理解
- 探讨PHP引用&符号的一些注意问题
- 用const时应注意的一些地方
- 探讨PHP引用&符号的一些注意问题
- 自己总结的一些需要注意的地方,含点个人小技巧&&经验
- C# 引用类型作为函数参数时一些需要注意的地方
- 在PostgreSQL中使用日期类型时一些需要注意的地方
- SQL 语句一些注意的地方
- spring3和spring4的一些需要注意的地方
- Java学习7——一些注意的地方
- const与引用&
- nginx配置ws和一些配置需要注意的地方
- Java引用传递需要注意的地方
- 有关于eclipse配置spket需要注意的一些地方
- php引用(&)详解及注意事项(转)
- Objective-C中一些 值得程序员注意的地方(转载)
- 常引用,const CString&,引用的效率
- C语言一些注意的地方
- const type&的使用注意