常量折叠
来源:互联网 发布:软件测试相关知识 编辑:程序博客网 时间:2024/04/29 06:59
常量折叠也可以称作常量合并。
首先来看一个例子:
int main(int argc, char* argv[])
{
const int i=0;
int *j = (int *) &i;
*j=1;
cout<<&i<<endlcout<<j<<endl;
cout<<i<<endl;
cout<<*j<<endl;
return 0;
}
结果是
0012ff7c
0012ff7c
0
1
因为i和j都指向相同的内存地址,所以输出的前两个结果是相同的,但为啥相同的内存里的结果不相同么?--这就是常量折叠.
这个"常量折叠"是 就是在编译器进行语法分析的时候,将常量表达式计算求值,并用求得的值来替换表达式,放入常量表。可以算作一种编译优化。
我只是改了这个地址内容,但是i还是0,
因为编译器在优化的过程中,会把碰见的const全部以内容替换掉(跟宏似的: #define pi 3.1415,用到pi时就用3.1415代替),这个出现在预编译阶段;但是在运行阶段,它的内存里存的东西确实改变了!!!
- 常量折叠
- 常量折叠
- 常量折叠
- 常量折叠
- 常量折叠
- 常量折叠
- 常量折叠
- 常量折叠
- 常量折叠
- 常量折叠
- 常量折叠
- 常量折叠
- 常量折叠
- 常量折叠
- 常量折叠
- c++常量折叠(常量替换)
- c++常量折叠(常量替换)
- 常量折叠-2
- 微软安全新闻聚焦-双周刊第九期
- 使用自定义端口连接SQL Server 2008的方法
- JVM调优总结(九)---新一代的垃圾回收算法
- Ant中java任务使用命令行传参数
- 关闭Android root权限
- 常量折叠
- VC读写INI文件
- jQuery.ajax中success 和complete 区别
- DEV GridControl小结。。
- dimacs 格式数据导入QSql数据库
- CSS使用说明
- 命令行下面创建Rhodes程序项目Hello World,编译并启动BlackBerry模拟器运行程序
- 优美
- 大智慧权息数据格式