(1) 编译器处理方式不同  define宏是在预处理阶段展开。  const常量是编译运行阶段使用。(2) 类型和安全检查不同  define宏没有类型,不做任何类型检查,仅仅是展开。  const常量有具体的类型,在编译阶段会执行类型检查。(3) 存储方式不同  define宏仅仅是展开,有多少地方使用,就展开多少次,不会分配内存。  const常量会在内存中分配(可以是堆中也可以是栈中)。(4)const  可以节省空间,避免不必要的内存分配。 例如:
1 #define PI 3.14159 //常量宏
2 const doulbe Pi=3.14159; //此时并未将Pi放入ROM中 ......
3 double i=Pi; //此时为Pi分配内存,以后不再分配!
4 double I=PI; //编译期间进行宏替换,分配内存
5 double j=Pi; //没有内存分配
6 double J=PI; //再进行宏替换,又一次分配内存!  

 const定义常量从汇编的角度来看,只是给出了对应的内存地址,而不是象#define一样给出的是立即数,所以,const定义的常量在程序运行过程中只有一份拷贝,而 #define定义的常量在内存中有若干个拷贝。 (5) 提高了效率。 编译器通常不为普通const常量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储与读内存的操作,使得它的效率也很高。(6) 有些集成化的调试工具可以对const常量进行调试,但是不能对宏常量进行调试。

作者:耑新新,发布于  博客园

转载请注明出处,欢迎邮件交流:zhuanxinxin@foxmail.com

转载于:https://www.cnblogs.com/Amedeo/p/5745024.html

C++编程中const和#define的区别相关推荐

  1. C++ 中 const和define的区别

    来源网址:http://wujiangping.blog.163.com/blog/static/195182011201255115125205/ 请区别用#define命令定义的符号常量和用con ...

  2. php中const和define,PHP中const和define的区别是什么

    PHP中const和define的区别是什么 发布时间:2020-09-10 10:14:36 来源:亿速云 阅读:65 作者:小新 PHP中const和define的区别是什么?这个问题可能是我们日 ...

  3. fileoutputstream路径 android,Android编程中FileOutputStream与openFileOutput()的区别分析

    本文实例分析了Android编程中FileOutputStream与openFileOutput()的区别.分享给大家供大家参考,具体如下: openFileOutput() 首先给大家介绍使用文件如 ...

  4. 网络编程中BIO和NIO的区别

    网络编程中BIO和NIO的区别 先上结论 BIO中,每个请求因为要阻塞直到结果返回,所以比较好的解决是每个请求都需要一个线程来处理,但是线程又是他的制约条件. NIO中,每个请求进来都会绑定到一个ch ...

  5. uniapp 获取到js文件var一个变量怎么获取到这个变量值_浅析Js中const,let,var的区别及作用域...

    理解:let变量的作用域只能在当前函数中 js中const,let,var的区别及作用域_lianzhang861的博客-CSDN博客​blog.csdn.net 全局作用域中,用 const 和 l ...

  6. C++中typedef和define的区别

    typedef和#define的用法与区别 一.typedef的用法 在C/C++语言中,typedef常用来定义一个标识符及关键字的别名,它是语言编译过程的一部分,但它并不实际分配内存空间,实例像: ...

  7. python listen_python socket编程中listen和accept的区别

    匿名用户 1级 2016-08-21 回答 listen函数在一般在调用bind之后-调用accept之前调用,它的函数原型是: intlisten(int sockfd, int backlog) ...

  8. php中const和static的区别和联系

    1.const是类中的常量,类外用define来定义常量 2.const只可以修饰类的属性,不能修饰类的方法,static可以修饰属性,也可以修饰方法 3.const和static都属于类本身,而不属 ...

  9. C#中const和readonly的区别

    C#引入了readonly修饰符来表示只读域,const来表示不变常量.顾名思义对只读域不能进行写操作,不变常量不能被修改,这两者到底有什么区别呢?只读域只能在初始化--声明初始化或构造器初始化--的 ...

最新文章

  1. Multi-Task Learning的几篇综述文章
  2. my friends
  3. Linux shell 正则表达式用法
  4. ExtJs与JavaScript的call方法
  5. php引用shell变量,Linux Shell Bash变量的间接引用 - Powered by PHPWind....
  6. Linux查看端口使用状态及启动
  7. MS SQL 2008 发布订阅配置错误总结
  8. 真正的高手,都有增长思维!(深度好文)
  9. mysql函数大全最小,MySQL函数一览_MySQL函数全部汇总
  10. MySQL中的substr()函数
  11. 在WebClient类中保持Session
  12. 等高线生成地形_等高线一键变地形模型
  13. python实现第三方验证码获取_Python 原生爬虫教程
  14. 本地安装易邮邮箱服务器并用foxmail 连接测试
  15. 11.scrapy框架持久化存储
  16. 苹果系统摩尔庄园是什么服务器,摩尔庄园手游iOS
  17. 计算机应用基础上海交通大学出版社双色版,计算机应用基础模块化教程
  18. 用时间做种子生成随机数
  19. Fedora10下AMD,Nvidia,Intel显卡驱动安装指南
  20. 浏览器操作常用快捷键

热门文章

  1. GIT命令行的一些基本操作
  2. Linux 远程连接工具 【vnc viewer】 图形界面
  3. kafka 消费者消息确认_Kafka整体架构图解
  4. 【Python-2.7】如何判断对象是否为可迭代?
  5. 解决js跨域使用nginx配置问题
  6. SQLServer IP不能登录问题解决
  7. idea解决tomcat控制台中文乱码问题
  8. 解决“此图片来自微信公众平台未经允许不可引用”的方法
  9. 在package.json中使用git URL依赖分支或标记?
  10. 如何使用Bash将stdout和stderr重定向并附加到文件?