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


0 0
原创粉丝点击