相信只要看过有关C++优化的动物都知道,那些优化条款中总会提到: 用 const 来代替 #define,我一直以来也是这么做,并且很少怀疑过,但今天却发现了一个 const 的不足之处:
相信只要看过有关C++优化的动物都知道,那些优化条款中总会提到: 用 const 来代替 #define,我一直以来也是这么做,并且很少怀疑过,但今天却发现了一个 const 的不足之处:
const int i=0;
void main()
{
printf("address of const i:%08X\n",&i);
}
对于以上的代码,我希望编译的时候提示出错,但很可惜,没有任何错误发生
再来看看,
const int i=0;
void main()
{
int *p=(int*)&i;
*p=33;
}
编译,通过!!但程序一运行就立即发生不人见人爱的非法操作..-_-
从上面的2则代码中,我们可以看出
(1) const 也需要占用内存,并且需要占用文件空间,这对程序来讲,无疑是种残酷的折磨
不过,当遇到访问这个变量时语句时,编译器会用常数而不是内存寻址的方式
(2) 在一定的程度来讲, const 会导致严重的后果,一但代码比较多,这种错误往往难以被发现
所以,我还是建议要用常量的朋友用#define(看看自带的.h,哪个不是用#define的?),如果你对#define还是觉得不怎样,那还可以试试用enum
(测试环境: VS6.0,Win98Se)