简说C++中define与const的区别

依旧是由于腾讯的面试,我意识到自己的渣。。。面试官问我宏定义的define和const的区别,我只回答了宏定义是预编译,所以速度上比const更快一些,剩下的没回答什么。虽然我也知道define不仅可以定义数,还可以定义函数,但是当时确实没有往这个方向想,所以我想在这里总结一下,为以后的面试和开发做准备。


在说区别之前,有几点背景知识是我们需要掌握的。

(截图说话,侵删)  

 这是C语言编译的过程,C++无异。

  1. 首先都是预编译阶段,所谓预编译,就是要做到:宏替换、去注释、展开头文件、条件编译,将 .c 文件变成 .i 文件。
  2. 其次,就是编译阶段。编译阶段需要检查语法并生成汇编语言,即 .i 文件生成 .s 文件。
  3. 第三阶段,将汇编文件变成机器可读的机器代码,所谓机器代码,就是01代码,.s变成.o文件
  4. 最后机器文件链接,生成可执行的 .out文件。

接下来说重点:

区别:

  1. #define是宏定义,是在预编译阶段处理,进行宏替换;const是在编译阶段起作用;
  2. #define是宏替换,不会检查类型,而const会进行类型判断,能够在编译阶段检查一些错误;
  3. #define替换的地方都会在内存中存储,有n个备份,n=替换数,而const只有一个备份,节省内存空间;
  4. #define无法调试,const可以调试。

优缺点(其实和区别对应):

  1. const可以进行调试,且比较省内存空间,能够提升程序运行效率;
  2. #define占用内存更多,但是依然能够提升程序运行效率,但是可以替换函数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值