const的引用
2016-04-06 21:46
281 查看
1.const引用可以绑定const对象,但是非const引用无法绑定const对象,const引用,且必须初始化。
2.虽然要求引用的类型必须与其引用对象的类型一致,但是有两个例外。第一种就是初始化常量引用时允许用任意表达式作为初始值,只要该表达式的结果能转换成引用的类型即可。第二种在类的多态中讲解。
尤其,允许为一个常量引用绑定非常量的对象,字面值,甚至是个一般表达式,其实就是左值的限定符要包含右值的限定符:
const int ci = 1024; //正确 const int &r1 = ci; //正确,引用和对象都是const r1 = 42; //错误,const的引用无法被修改 int &r2 = ci; //错误,非const引用不能指向const对象 int &r2 = r1; //错误,非const引用不能指向const引用
2.虽然要求引用的类型必须与其引用对象的类型一致,但是有两个例外。第一种就是初始化常量引用时允许用任意表达式作为初始值,只要该表达式的结果能转换成引用的类型即可。第二种在类的多态中讲解。
尤其,允许为一个常量引用绑定非常量的对象,字面值,甚至是个一般表达式,其实就是左值的限定符要包含右值的限定符:
int i = 42; const int &r1 = i; //正确,允许将const int引用绑定到一个普通的int对象上 i = 43; //正确,i不是常量,可以修改。 cout << r1 << endl; //正确,且输出43。 r1 = 1; //错误,r1是常量引用,不能修改它 const int &r2 = 42; //正确,r2是常量引用 const int &r3 = r1 * 2; //正确,r3是一个常量引用 int &r4 = r1 * 2; //错误,r4是一个普通的引用,右值不能为表达式,只能为与左值相等的类型的对象或者引用 double dval = 3.14; const int &ri = dval; //正确,编译器将dval值转换了一下,具体转换过程如下。 const int &ri1 = 3.14; //正确,编译器将dval值转换了一下,具体转换过程如下。 dval = 123; cout << ri << " "<<dval << endl; //输出3 123。因为ri指向的是编译器给予的临时量变量,而不是dval。 /* 对于这种情况,编译器进行了如下变换: const int temp = dval; //编译创建一个临时量对象来存储dval转换成整型后的数 const int &ri = temp; //将引用指向临时量对象 */
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Python动态类型的学习---引用的理解
- 关于指针的一些事情
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- Lua中调用C++函数示例
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- Shell脚本中引用、调用另一个脚本文件的2种方法
- vbs引用另一个vbs的代码
- C++联合体转换成C#结构的实现方法
- C++高级程序员成长之路
- C++编写简单的打靶游戏
- C++ 自定义控件的移植问题
- C++变位词问题分析
- C/C++数据对齐详细解析
- C++基于栈实现铁轨问题
- C++中引用的使用总结
- 使用Lua来扩展C++程序的方法