博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++编程中const和#define的区别
阅读量:6576 次
发布时间:2019-06-24

本文共 759 字,大约阅读时间需要 2 分钟。

(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常量进行调试,但是不能对宏常量进行调试。

作者:耑新新,发布于  

转载请注明出处,欢迎邮件交流:

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

你可能感兴趣的文章
删除指定文件夹下所有的.svn文件夹
查看>>
for嵌套:1.兔子生兔子问题 2.打印菱形 3.求100以内质数的和
查看>>
封装类实现增删改查
查看>>
视觉树
查看>>
【转】Cocoa中的位与位运算
查看>>
uva 10082 - WERTYU
查看>>
【天天数据结构和算法】PHP实现二叉搜索树
查看>>
团队作业4--第一次项目冲刺(Alpha版本) 4
查看>>
自然数的拆分问题 字典序
查看>>
PageControl 组件
查看>>
初识Python
查看>>
Python3中isdigit(), isdecimal(), isnumeric()的区别和字符串的常用方法
查看>>
暑期周记8
查看>>
ASP.NET MVC中利用AuthorizeAttribute实现访问身份是否合法以及Cookie过期问题的处理...
查看>>
第七周技术博客
查看>>
maven构建struts工程
查看>>
线性表练习题1
查看>>
ubuntu 14.04 使用 xfce4 的时候,会有图标问题
查看>>
java改时区
查看>>
IBM黑衣小组【转载】
查看>>