您的位置:首页 > 其它

const 可折叠常量和不可折叠常量

2013-12-21 17:25 176 查看
根据网上总结的。

constant folding 一种编译优化技术。例如:2+2 应该在编译是就处理为4.

常量一般分为两种:可以常量折叠的常量和不可以常量折叠的常量。

常量折叠:在编译时期用常量的具体取值代替所有用到常量的地方。(就是编译优化后,对于常量数据,就没有对应的变量存在了,直接就是操作这个常量数值)

对于不可以常量折叠的常量,编译器一定会为它分配空间的,因为它无法“常量折叠”,需要在程序运行时刻通过常量名字引用常量的具体值。

对于可以常量折叠的常量,编译器也不一定不为它分配空间(如果对X取地址或其他用到X存储空间相关的操作,那么X是分配储存空间的),比如:

const int a = 4;

const int *pi = &a;

此处“取a的地址”,如果不对a进行内存分配,那a又怎么会有地址呢?

不可以常量折叠的常量的例子:

int test(){ return 8; }

const int a = test();//常量a不可以常量折叠

cout << a << endl;//由于a不可以常量折叠,所以经过编译器扫描之后仍然是“cout << a << endl;”

常量折叠的例子:

例如

const int a = 8;

cout << a << endl;

经过编译器扫描后,变为:

cout << 8 << endl;

又比如:

const int X = 5;

那么 Y = 2*X

在优化后是 2*5, 没有这个 X 的存在 ....

验证性文章:/article/2101632.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: