C++(十九) — const 和 #define 区别

1、const 

  (1)C++对 const 常量的处理过程:当编译器碰到 常量声明 时,在符号表中放入常量,编译时发现使用常量,则直接以符号表中的值替换。

  (2)如果,编译中发现,对 const 使用 extern 或者 & 操作符时,则会给对应变量分配新的存储空间。

  符号表保存的内容:  key       value

                 a      10

  在程序运行时,符号表是不变的。

(3)const 是在编译器编译期间,分配内存。

int main()
{
    const int a = 10; // a 定义为一个常量

    int *p = nullptr;
    p = (int *)&a;  //此处取a 的地址,但C++会单独分配一个新的内存空间,
    *p = 20;        //间接赋值,不会改变 a 中的值,因为保存的不是一个内存空间
    cout << "const a is: " << a << "\n";     // 输出:10
    cout << "point p is: " << *p << endl;    // 输出:20

    system("pause");
    return 0;
}

 2、const 和 #define 区别

    (1)都是在编译时处理的,即分配内存,作用是相同的。即:二者基本等价

const int c=5;
#define c 5

  (2)区别:const 常量是由编译器处理的提供类型检查和作用域检查;

           #define,宏定义由预处理器处理,单纯的文本替换。可以用 #undef a 卸载宏定义。

 

posted @ 2018-12-19 20:56  深度机器学习  阅读(1617)  评论(0编辑  收藏  举报