- 1.常量折叠是一种编译器优化方法。
- 2.c++里的常量折叠(或者常量替换)是将const常量放在符号表中,而并不给其分配内存。
- 3.对一个常量名或者变量名的引用分为裸引用或复合引用。
- 裸引用:
- const int n=10;
- int m=n;//此即常量名的裸引用
- 复合引用:
- const int n=10;
- int* p=(int*)&n;//此即常量名的复合引用
- 如果裸引用常量名,那么编译器为了减少内存分配,采取直接替换的方式来优化。
- const int n=10;
- int m=n;//此即常量名的裸引用
- 编译后
- const int n=10;
- int m=10;//此即常量名的裸引用,n依然没有内存空间,仅仅位于符号表中。
- 如果是复合引用常量名,那么编译器才为其分配内存。
- const int n=10;
- int* p=(int*)&n;//此即常量名的复合引用
- 编译后
- n有了内存空间
- 4.以下是程序实例
- const int n=10;
- int* p=(int*)&n;//将const int * 转换为int *
- *p=20;
- //打印地址//另一种改变常量值的方式
- cout<<p<<endl;//两个输出地址相同
- cout<<&n<<endl;
- //打印值
- cout<<*p<<endl;//输出20
- cout<<n<<endl;//输出10
- 编译后
- const int n=10;
- int* p=(int*)&n;//将const int * 转换为int *,编译器同时给n分配内存空间
- *p=20;//此时n的内存空间的值为20
- //打印地址
- cout<<p<<endl;//两个输出地址相同
- cout<<&n<<endl;
- //打印值
- cout<<*p<<endl;//输出20
- cout<<10<<endl;//编译器将n替换成10
C++编译器的常量折叠
最新推荐文章于 2023-10-08 01:25:43 发布