const 与 #define 的比较

类别:编程语言 点击:0 评论:0 推荐:
相信只要看过有关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)

本文地址:http://com.8s8s.com/it/it24300.htm