设为首页 加入收藏

TOP

C++中Const说明教程(四)
2014-07-19 23:04:48 来源: 作者: 【 】 浏览:297
Tags:Const 说明 教程

 

  b.无常量折叠

  另一种情况,如果赋值不是常量表达式,这时是需要访问存储区域才能得到确切值的,这种情况并不会有"常量折叠",如下:

int i=10;

const char gc = cin.get();   //或者const char gc = i都是一样的

char *t = (char *)&gc;

*t += 2;

cout << *t <<endl << gc << endl;

输如:a

输出:

c

c

  从上面这个情况可以看出,虽然gc是局部的const,但是它的值是不确定的,是需要用户输入的,因此会为gc在栈中分配空间,并且因为gc的值不确定,它不能得到常量折叠带来的优化。程序中使用gc的地方,必须直接到存储区域去访问才能得到值,所以*t和gc的值是保持一致的。

  无常量折叠的情况下,一定是分配了内存空间的,因为无常量折叠的本质就是值不确定,需要到内存中获取。而有常量折叠的情况下,内存空间可能分配了,也可能没分配,如果分配了,那是因为对该常量进行了取地址相关的操作。

  volatile关键字:

  除此之外,volatile关键字也能够屏蔽掉常量折叠,如下:

volatile const int i=1;

int *p=(int *)&i;

*p=2;

cout<<*p<<endl<<i<<endl;

输出结果:

2

2

  上面是我查阅资料综合得到的情况,具体来说,const使用情况可分为全局和局部(static关键字是一个因素),局部下又可分为分配内存与不分配内存、有常量折叠和无常量折叠,分不分配内存取决于是否要对该常量进行地址相关的操作(如&或者直接从内存取值),有没有常量折叠取决于需不需要直接从内存中取值。

      

首页 上一页 1 2 3 4 5 下一页 尾页 4/5/5
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇关于C++的vector的实例学习 下一篇C++堆和栈空间的区别

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·About - Redis (2025-12-26 08:20:56)
·Redis: A Comprehens (2025-12-26 08:20:53)
·Redis - The Real-ti (2025-12-26 08:20:50)
·Bash 脚本教程——Li (2025-12-26 07:53:35)
·实战篇!Linux shell (2025-12-26 07:53:32)