C++的const引用
来源:互联网 发布:mac svn客户端使用教程 编辑:程序博客网 时间:2024/06/05 00:53
刚开始学习C++, 看到了C++的引用,有些地方不太理解,经过了些许思考,现做如下总结:
const引用只是给普通变量起一个别名而已:
1. 将非const变量赋值给非const引用:
void test2(){int i = 1;int &j = i;printf("%d\n", j);i = 10;printf("%d\n", j);}执行结果: 1
10
在这里i,j只不过是对同一段内存空间的不同标记而已。
2. 将非const变量赋值给const引用:
void test2(){int i = 1;const int &j = i;printf("%d\n", j);i = 10;printf("%d\n", j);}
执行结果: 1
10
在这里i,j同样是对同一段内存空间的不同标记,但是因为j是const引用,所以不能改变j的指向。但由于j始终和i指向同一段内存,当i改变时j也会随之改变。
void test3(){const int i = 1;int &j = i;}
很遗憾,不能这样做,不能将一个const变量赋值给非const引用。
4. 将const变量赋值给const引用:
void test4(){const int i = 1;const int &j = i;}
在这种情况下由于i,j都是const的所以不能被修改。
5. 将常量赋值给非const引用:
void test5(){int &i = 1;}
很遗憾,不能这样做,不能将一个常量赋值给非const引用!
6. 将常量赋值给const引用:
void test6(){const int &i = 1;}
可以将一个常量赋值给const引用!
7. 将不同类型的值赋值给const引用:
void test5(){double i = 3.14;const int &j = i;printf("%p\n", j);i = 20.2;printf("%p\n", j);}
执行结果: 3
3
为什么不是20呢?这是由于将一个double类型的值转换为int类型时编译器相当于做了一次中转:
double i = 3.14;
int tmp = double ; // tmp = 3
const int &j = tmp;
此时j,tmp指向同一段内存空间,由于我们无法修改tmp,所以j将不会被修改。
- 【c/c++】const引用
- C++:const和引用
- C++const对象和 引用
- 11、C++const指针 引用
- c传参引用const
- const 引用(c++primer笔记)
- C++_引用与const
- C++:指针、引用和CONST
- C--我对指针和引用const之后的理解
- const引用的用途
- C++的const引用
- const指针的引用
- const的引用
- const的引用
- const指针的引用
- C++primer: 引用&与 const 引用
- C++(常)引用,const,指针引用
- C和C++中const的区别,引用,一级指针和const组合
- UVa 10812 Beat the Spread! (陷阱)
- cocos2d-x节点(CCProfiling.h)API
- cocos2d-x节点(CCNotificationCenter.h)API
- shiro入门实例
- 总结C#保留小数位数
- C++的const引用
- Java工作队列和线程池
- 【回溯】全排列
- 在论坛中出现的比较难的sql问题:12(递归问题2 拆分字符串)
- JAVA中CLASS.FORNAME的含义
- CRegKey::QueryValue连续读取注册表时读不出来值的解决办法
- D.K.的Android旅程--ArrayAdapter和ListActivity实现ListView
- 用c语言输入学生信息保存到文件中并读取文件内容
- next_permutation