C++ 常量折叠问题的理解
来源:互联网 发布:淘宝上的桃木 编辑:程序博客网 时间:2024/05/22 06:35
在C++中,const变量(即常量)值放在编译器的符号表中,计算时编译器直接从表中取值,而不是访问内存,省去了访问内存的时间,这也就是所谓的编译器优化。
下面的代码可以很清晰的看出:
main.cpp
#include <iostream>using namespace std;int main(int argc,char** argv){/*volatile*/ const int i = 0;int *j = (int *) &i;*j = 1;cout<<"i:"<<i<<endl;cout<<"*j:"<<*j<<endl;cout<<"&i:"<<&i<<endl;cout<<"j:"<<j<<endl;cin.get();return 0;}
结果:
未加volatile:
而在C语言中,const是运行时const,编译时只是定义,运行时才会初始化,C语言中,const常量不可以作为数组的长度原因就是在此,在C语言中const变量在运行时改变是可以再次读出改变后的值的
而在C++中,const是编译时const,相当于#define定义的常量
注意:在C和C++中,const变量确实会被上面的代码所改变,但是C++在运行时改变const,再次读取的还是编译器符号表中的常量数据
那么怎么在C++中做到和C语言的情况呢?
C++中有一个volatile关键字,告诉编译器不要对这样的对象进行优化~
所以加上volatile之后,会强制从内存中取值
加volatile结果:
1 0
- C++ 常量折叠问题的理解
- 常量折叠的理解
- C++const/常量折叠
- 常量折叠问题
- C++中的常量折叠问题
- 关于const是否分配空间和常量折叠的问题
- C++编译器的常量折叠
- 常量折叠
- 常量折叠
- 常量折叠
- 常量折叠
- 常量折叠
- 常量折叠
- 常量折叠
- 常量折叠
- 常量折叠
- 常量折叠
- 常量折叠
- Jsp,Servlet和Tomcat
- HTTP协议学习篇(一)—http请求
- Permutations II
- PAT A1001. A+B Format
- AOP-自动代理生成器-Bean名称自动代理生成器
- C++ 常量折叠问题的理解
- 面向对象第六章 异常
- Android实用技巧之adb命令:getprop,setprop,watchprops命令的使用
- halcon算子region_to_bin
- 通过session来设置登录主界面时,通过过滤器filter判断是否已经登录过,如果已经登陆过可以直接访问主界面,如果没有,需要重新登陆
- 机器学习-python实现DBSCAN
- ADV-66-算法提高-阮小二买彩票
- linux中动态库和静态库的区别
- 2013年第四届蓝桥杯C/C++省赛 第39级台阶(结果填空) ----DFS深度搜索遍历和暴力搜索