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

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值