首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

const定义常量的有关问题

2012-03-31 
const定义常量的问题我知道使用#define定义常量是在预编译阶段实现替换;但是对const的使用确不是很明白,比

const定义常量的问题
我知道使用#define定义常量是在预编译阶段实现替换;但是对const的使用确不是很明白,比如定义个一个常量:

            const   int   MINPH   =   60;
那么对于这个语句预编译器应该不会执行的,就不存在替换现象。但是我想问一下MINPH是不是占用内存空间?编译器怎么处理这个变量的?

[解决办法]
占用空间

存储跟一般int 变量一样,只是编译器给它标上了只读的标志
[解决办法]
确实,没有动用预编译器。
但是,不是只有预编译器才执行“替换现象”呀。
MINPH可能占用空间也可能不占用空间。应该让你的代码不关心它是否占用内存。

google “常量折叠”吧。

[解决办法]
< <c++编程思想> > 7.1 const和枚举

C + +编译器通常并不为c o n s t分配存储空间,而是把它保存在符号表里。当c o n s t被使用时进行常量折叠。

当然,绝对不为任何c o n s t分配存储是不可能的,尤其对于复杂的结构。和象上面的extern 声明的.取一个常量的地址等情况下,编译器建立存储而不是常量折叠。

[解决办法]
其实#define也是占用空间的。
比如#define string "hello "
虽然替换,但是也需要存储 "hello "的空间啊。
[解决办法]
#include "stdio.h "


int main()
{
const int c1 = 100;
int* p1 = (int*)&c1;

printf( "%p\n%d\n ", &c1, c1);

*p1 = 200;

printf( "%p\n%d\n ", p1, *p1);

printf( "%p\n%d\n ", &c1, c1);


return 0;
}


用c++编译的结果是

0012FF60
100
0012FF60
200
0012FF60
100
请按任意键继续. . .

用c 编译的结果是

0012FF60
100
0012FF60
200
0012FF60
200
请按任意键继续. . .


可以看出,在c++里 const 大致就是define了
在c里,就是一个只读变量

热点排行