常量折叠说的是,在编译阶段,对该变量进行值替换,同时,该常量拥有自己的内存空间,并非像宏定义一样不分配空间。
#include <stdio.h>
int main(void)
{
const int con = 5;
printf("%d\n",con);
int *ptr;
ptr = const_cast<int *> (&con);
*ptr =67;
printf("%d\n",con);
printf("%d\n",(int)(&con));
printf("%d\n",(int)ptr);
printf("%d\n",*(&con));
printf("%d\n",*ptr);
return 0;
}
Output:
5
5
-3441912
-3441912
5
67
在线编译结果
注:因为编译器在优化的过程中,会把碰见的const全部以内容替换掉(跟宏似的: #define pi 3.1415,用到pi时就用3.1415代替),这个出现在预编译阶段;但是在运行阶段,它的内存里存的东西确实改变了!!!