Const用法
来源:互联网 发布:上海兴安得力软件 编辑:程序博客网 时间:2024/06/07 23:20
关于const
编译器将在编译过程中把用到的该变量的地方都替换成对应的值(编译后const变量相当于一个字面值)
const int bufsize = 512;//编译后使用bufsize相当于直接使用512
因此const对象仅在当前文件内有效(在别的文件中访问不能得到它的初始值)要在别的文件中使用const必须用extern添加到声明和定义
引用和const
对于const的引用如果引用一个并非const的对象
如果该对象类型与引用类型不一致,改变对象的值,对const的引用的值不变(实际上此时引用的绑定的并非原本的对象,而是一个中间临时生成的对象)
如果该对象类型与引用类型的一致,则改变对象的值,对const的引用的值也改变(此时引用绑定的才是原来的对象)
double i = 42;const double &r1 = i;const int &r2 = i;cout << r1 << "," << r2 << endl;//输出:42,42i = 33;cout << r1 << "," << r2 << endl;//输出:33, 42顶层const和底层const
对指针来说,顶层const是对指针本身的限制(常量指针)
int *const p = nullptr;
底层const是对指针操作的限制(指向常量的指针)
const int * p = nullptr;对于内置数据类型来说,只存在顶层const,顶层const可以表示任意对象是常量
const int j = 0;j = 1;//错误,表达式必须是可修改的左值int const k = 0;k = 1;//错误,表达式必须是可修改的左值
对于引用来说,只存在底层const用来声明引用的const都是底层const
int i = 0;const int &r1 = i;r1 = 1;//错误,表达式必须是可修改的左值int const& r2 = i;r2 = 1;//错误,表达式必须是可修改的左值
在拷贝时,对于指针,右值为底层const时,左值必须为const
当等号左右两边同时为指针或引用或内置数据类型时,顶层const不受影响
当等号右边为内置数据类型,左边为指针时,对于内置数据类型的顶层const不能忽视,对于引用和指针,因为在这里使用引用的地方相当于它绑定的对象,所以于内置数据类型相同。
const int i = 0;
int j = 0;int *const p1 = &j;//此时p1不能绑定 iconst int *const p5 = &i;//正确const int *p2 = &j;int *p3 = nullptr;const int*p4 = j;//正确//int & r1 = i;//错误const int&r1 = i;//正确int &r2 = i;//错误int &r2 = j;//正确p2 = &r1;p3 = p1;//正确p4 = p1;//正确//p3 = p2;//错误p4 = p2;//正确p4 = p5;//正确
因为顶层const限制的是指针本身(前提是p1指向的是一个非const对象),因此p1值只能存放j的地址,而p3,p4指向p1指向的地址,并不影响p1本身对于j的指向所以正确;
虽然i是顶层const,但是p1不是顶层const,所以如果忽略顶层const的话p1就可以改变i的值,因此这里不能忽视顶层const;
而底层const限制的是p2的操作如果将p2拷贝给别的普通指针,通过这个指针可以改变j的值,会引起p2底层const机制的错误,因此要拷贝底层const必须对左值加以限制(声明为底层const);
- const用法
- const用法
- const用法
- const用法
- const用法
- const 用法
- const用法
- const 用法
- const用法
- const用法
- const用法
- const用法
- const用法
- const用法
- CONST用法
- const用法
- const用法
- const用法
- 109. Convert Sorted List to Binary Search Tree
- 2017.10.29本周汇报
- Hadoop 2.0工作原理学习
- python笔记10
- Myeclipse导出jar包配置Main-Class
- Const用法
- 网页动态时钟特效!一看就懂,附带效果图哦!!!
- 技术博客收纳
- 文章标题
- JavaWeb学习笔记-java基础-2-静态导入
- ORACLE数据库误操作执行了DELETE,该如何恢复数据?
- [转载]兼容性--rem兼容适配解决方案
- VS 无法在web服务器上启动调试。您没有调试web服务器进程的权限
- QML 学习摘录 06