C++编译器的常量折叠

  1. 1.常量折叠是一种编译器优化方法。
  2. 2.c++里的常量折叠(或者常量替换)是将const常量放在符号表中,而并不给其分配内存。
  3. 3.对一个常量名或者变量名的引用分为裸引用或复合引用。
  4. 裸引用:
  5. const int n=10;
  6. int m=n;//此即常量名的裸引用
  7. 复合引用:
  8. const int n=10;
  9. int*  p=(int*)&n;//此即常量名的复合引用
  10. 如果裸引用常量名,那么编译器为了减少内存分配,采取直接替换的方式来优化。
  11. const int n=10;
  12. int m=n;//此即常量名的裸引用
  13. 编译后
  14. const int n=10;
  15. int m=10;//此即常量名的裸引用,n依然没有内存空间,仅仅位于符号表中。
  16. 如果是复合引用常量名,那么编译器才为其分配内存。
  17. const int n=10;
  18. int*  p=(int*)&n;//此即常量名的复合引用
  19. 编译后
  20. n有了内存空间
  21. 4.以下是程序实例
  22. const int n=10;
  23. int*  p=(int*)&n;//将const int * 转换为int *
  24. *p=20;
  25. //打印地址//另一种改变常量值的方式
  26. cout<<p<<endl;//两个输出地址相同
  27. cout<<&n<<endl;
  28. //打印值
  29. cout<<*p<<endl;//输出20
  30. cout<<n<<endl;//输出10
  31. 编译后
  32. const int n=10;
  33. int*  p=(int*)&n;//将const int * 转换为int *,编译器同时给n分配内存空间
  34. *p=20;//此时n的内存空间的值为20
  35. //打印地址
  36. cout<<p<<endl;//两个输出地址相同
  37. cout<<&n<<endl;
  38. //打印值
  39. cout<<*p<<endl;//输出20
  40. cout<<10<<endl;//编译器将n替换成10
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值