const 与 #define的区别
来源:互联网 发布:java在数据库中写的表 编辑:程序博客网 时间:2024/04/20 13:12
由于笔试面试中常常被问及这两者之间的区别,在此作一个简单的总结和扩充。
在C语言中:
#define用来定义宏,用宏来代替常量(包括无参量、有参量);
typedef用来为类型标示符定义别名,以便增加可读性;
到了C++中:
const、enum、inline、引用也都成为了定义别名的工具。
其中#define与const的区别主要如下:
在C++中不推荐用宏,尽量少用。因为C++是强类型的语言,希望通过类型检查来降低程序中的很多错误,而宏只是在编译期前做简单替换,绕过了类型检查,失去了强类型系统的优势支撑。
(1) 编译器处理方式不同
define宏是在预处理阶段展开。
const常量是编译运行阶段使用。
(2) 类型和安全检查不同
define宏没有类型,不做任何类型检查,仅仅是展开。
const常量有具体的类型,在编译阶段会执行类型检查。
(3) 存储方式不同
define宏仅仅是展开,有多少地方使用,就展开多少次,不会分配内存。
const常量会在内存中分配(可以是堆中也可以是栈中)。
(4) const 可以节省空间,避免不必要的内存分配。 例如:
const定义常量从汇编的角度来看,只是给出了对应的内存地址,而不是象#define一样给出的是立即数,所以,const定义的常量在程序运行过程中只有一份拷贝,而 #define定义的常量在内存中有若干个拷贝。
参考:
http://blog.sina.com.cn/s/blog_79b01f6601018xdg.html
http://blog.csdn.net/weiwenhp/article/details/8476767
http://blog.chinaunix.net/uid-22330495-id-200907.html
http://wenku.baidu.com/link?url=L08vixs7D77pVgju10bqSxIYdpaT9D7kdQtWsTn9mmBJGOdyVhew_VpxdomkzIUYz00-E4ULcXeMTYQZOJnZAlE8JUJnAj5T-0x1HqMd2mm
- const与#define的区别
- #define与const的区别
- define与const的区别
- const与#define的区别
- const与#define的区别
- const 与 #define的区别
- const与#define的区别
- const 与 #define的区别
- const与define的区别
- const与#define的区别
- const与#define的区别
- const 与#define的区别
- const与define的区别
- const与#define的区别
- const与define的区别!!!!!
- const与#define的区别
- const与#define的区别
- #define与const的区别
- 简单通用数据访问层
- Monkey源码分析番外篇之WindowManager注入事件如何跳出进程间安全限制
- 欢迎使用CSDN-markdown编辑器
- 火狐iframe的src属性更改后onblur失效问题
- BUFSIZ定义及作用
- const 与 #define的区别
- IaaS, PaaS和SaaS公司都做些什么
- JAVA 子类方法签名相同 返回类型不同
- URAL 1296. Hyperjump(最大子序列和)
- 现货交易止损是控制风险的最好方法
- 软件测试方法汇总(转载)
- URAL 1567. SMS-spam (小学数学题)
- 两个数最大公约数,证明与实现
- PAT A1011. World Cup Betting