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 卸载宏定义。

  • 相关阅读:
    Azure HPC Pack Cluster添加辅助节点
    Azure HPC Pack 辅助节点模板配置
    Azure HPC Pack配置管理系列(PART6)
    Windows HPC Pack 2012 R2配置
    Azure HPC Pack 节点提升成域控制器
    Azure HPC Pack VM 节点创建和配置
    Azure HPC Pack 部署必要条件准备
    Azure HPC Pack 基础拓扑概述
    Azure VM 性能计数器配置
    Maven私仓配置
  • 原文地址:https://www.cnblogs.com/eilearn/p/10134593.html
Copyright © 2011-2022 走看看