zoukankan      html  css  js  c++  java
  • 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 << "
    ";     // 输出: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 卸载宏定义。

  • 相关阅读:
    Java职业生涯规划
    Java类加载器总结
    Java字节流与字符流的区别
    Java堆和栈的区别
    详解Java类的生命周期
    Java编程常见问题汇总
    Java总结输入流输出流
    Java NIO:浅析I/O模型
    perl 处理文件路径的一些模块
    Delphi第三方控件安装卸载指南
  • 原文地址:https://www.cnblogs.com/eilearn/p/10134593.html
Copyright © 2011-2022 走看看