常量折叠

本文探讨了C++中常量折叠的概念及其如何影响编译优化过程。通过具体示例,展示了即使对const变量的引用被修改,其实际值也不会在运行时发生变化的现象。深入解析了编译器如何处理const关键字,以及它对程序性能的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

分析下列程序:

#include<iostream>
using namespace std;
int main() {
 const int a=10;
 int *p=(int *)(&a);
 *p=20;
 cout<<"a="<<a<<",*p"<<*p<<endl;
 return 0;
}
输出结果: a=10,*p=10;

分析:因为a 和p都指向相同的内存地址,所以输出的前两个结果是相同的,但为啥相同的内存里的结果不相同么?--这就是常量折叠. 

这个"常量折叠"是 就是在编译器进行语法分析的时候,将常量表达式计算求值,并用求得的值来替换表达式,放入常量表。可以算作一种编译优化。 
因为编译器在优化的过程中,会把碰见的const全部以内容替换掉(跟宏似的: #define pi 3.1415,用到pi时就用3.1415代替),这个出现在预编译阶段;但是在运行阶段,它的内存里存的东西确实改变了!!! 
简单的说就是,当编译器处理const的时候,编译器会将其变成一个立即数。 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值