c++中的常量折叠 http://blog.csdn.net/yafeng_jiang/article/details/7101964
来源:互联网 发布:vmware14安装ubuntu 编辑:程序博客网 时间:2024/06/05 14:24
分类:
版权声明:本文为博主原创文章,未经博主允许不得转载。
先来看一个例子:
- #include <stdio.h>
- int main() {
- const int a=9;
- int *p=(int*)&a;
- *p=10;
- printf("%p %p\n", &a, p); //0012FF7C 0012FF7C
- printf("a: %d , *p %d\n",a,*p); //a: 9 ,*p: 10
- return 0;
- }
由例子的结果发现:&a,p是同一块地址,但它们的输出结果却不相同。
这就是编译器的”常量折叠”在作怪啦!
"常量折叠"就是在编译器进行语法分析的时候,将常量表达式计算求值,并用求得的值来替换表达式,放入常量表。可以算作一种编译优化。
编译器在优化的过程中,会把碰见的const全部以内容替换掉(跟宏替换似的: #define pi 3.1415,用到pi时就用3.1415代替),这个出现在预编译阶段;但是在运行阶段,它的内存里存的东西确实改变了!
如果不想要编译器的这种优化就要用到volatile关键字啦。
- const int a=9;
修改为:
- volatile const int a=9;
即可。
另外const在c c++中还有一定的差别,有兴趣的朋友可以google一下。
0 0
- c++中的常量折叠 http://blog.csdn.net/yafeng_jiang/article/details/7101964
- 链表 C http://blog.csdn.net/pf4919501/article/details/38818335
- C/C++程序中的profile http://blog.csdn.net/cnjet/article/details/2617403
- C/C++ 开发库 | C/C++ Development Library http://blog.csdn.net/herorenme/article/details/18795935
- http://blog.csdn.net/IBM_hoojo/article/details/5688947
- http://blog.csdn.net/chenlaic/article/details/6143235
- http://blog.csdn.net/eaglewood2005/article/details/4335052
- http://blog.csdn.net/mchp/article/details/3995970
- http://blog.csdn.net/v_july_v/article/details/6015165
- http://blog.csdn.net/masterz/article/details/6232585
- http://blog.csdn.net/perfectpdl/article/details/6442847
- http://blog.csdn.net/eroswang/article/details/1967243
- http://blog.csdn.net/zhvsby/article/details/5986645
- http://blog.csdn.net/dz45693/article/details/6183645
- http://blog.csdn.net/david_lv/article/details/5798003
- http://blog.csdn.net/zxingchao2009/article/details/6299313
- http://blog.csdn.net/zhanxinhang/article/details/6783766
- http://blog.csdn.net/ruanruoshi/article/details/935510
- 数据存储之-SQLite数据库一
- LeetCode : Search for a Range [java]
- MAC OSX10.10上搭建Apache,PHP,MySQL5.6.22,phpMyAdmin开发环境
- jdbc批量插入实现大批量数据快速插入
- Win8 Tomcat安装及环境变量配置
- c++中的常量折叠 http://blog.csdn.net/yafeng_jiang/article/details/7101964
- 带你一步步实现线程池异步回调
- 你真的看懂R中的stem函数了吗?
- JDK动态代理
- ibatis源码学习(一)整体设计和核心流程
- EventBus使用详解
- Scala学习笔记--第1章 Scala基础
- 几种数据库的大数据批量插入
- 数据库面试常问的一些基本概念