const和#define 区别
2015-04-19 17:43
197 查看
1: 编译器处理不同
define宏是在预处理阶段展开,const常量是编译运行阶段使用。
2:类型和安全检查不同
const常量有数据类型,而宏常量没有数据类型,仅仅是展开。编译器可以对前者进行类型安全检查,而对后者只进行字符替换,没有类型安全检查,并且在字符替换时可能会产生意料不到的错误。
3: 存储方式不同
内存空间的分配上。define进行宏定义的时候,仅仅是展开,有多少地方使用,就展开多少次,不会分配内存空间,编译时会在main函数里进行替换,只是单纯的替换,不会进行任何检查,比如类型, 语句结构等,即宏定义常量只是纯粹的置放关系,如#define STR 0;编译器在遇到STR时用0代替STR。const常量会在内存中分配(可以是堆中也可以是栈中)。
4:空间和效率
const定义常量从汇编的角度来看,只是给出了对应的内存地址,而不是象#define一样给出的是立即数,所以,const定义的常量在程序运行过程中只有一份拷贝,而 #define定义的常量在内存中有若干个拷贝。 编译器通常不为普通const常量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储与读内存的操作,使得它的效率也很高
6:在PHP中的用法
. const本身就是一个语言结构,而define是一个函数。const在编译时要比define快很多。
. const用于类成员变量的定义,一经定义,不可修改。define不可用于类成员变量的定义,可用于全局常量。
. const可在类中使用,define不能。
. const不能在条件语句中定义常量,例如:
. const采用一个普通的常量名称,define可以采用表达式作为名称。
. const只能接受静态的标量,而define可以采用任何表达式。
. const定义的常量时大小写敏感的,而define可通过第三个参数(为true表示大小写不敏感)来指定大小写是否敏感。
define宏是在预处理阶段展开,const常量是编译运行阶段使用。
2:类型和安全检查不同
const常量有数据类型,而宏常量没有数据类型,仅仅是展开。编译器可以对前者进行类型安全检查,而对后者只进行字符替换,没有类型安全检查,并且在字符替换时可能会产生意料不到的错误。
3: 存储方式不同
内存空间的分配上。define进行宏定义的时候,仅仅是展开,有多少地方使用,就展开多少次,不会分配内存空间,编译时会在main函数里进行替换,只是单纯的替换,不会进行任何检查,比如类型, 语句结构等,即宏定义常量只是纯粹的置放关系,如#define STR 0;编译器在遇到STR时用0代替STR。const常量会在内存中分配(可以是堆中也可以是栈中)。
4:空间和效率
const定义常量从汇编的角度来看,只是给出了对应的内存地址,而不是象#define一样给出的是立即数,所以,const定义的常量在程序运行过程中只有一份拷贝,而 #define定义的常量在内存中有若干个拷贝。 编译器通常不为普通const常量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储与读内存的操作,使得它的效率也很高
6:在PHP中的用法
. const本身就是一个语言结构,而define是一个函数。const在编译时要比define快很多。
. const用于类成员变量的定义,一经定义,不可修改。define不可用于类成员变量的定义,可用于全局常量。
. const可在类中使用,define不能。
. const不能在条件语句中定义常量,例如:
<?php if(1){ const STR = '123'; // 出错 } if(1){ define('STR ', '123'); // 有效 } ?>
. const采用一个普通的常量名称,define可以采用表达式作为名称。
. const只能接受静态的标量,而define可以采用任何表达式。
. const定义的常量时大小写敏感的,而define可通过第三个参数(为true表示大小写不敏感)来指定大小写是否敏感。
相关文章推荐
- 整理:#define和typedefine的区别 以及const修饰指针的用法
- const与#define宏定义的区别——C语言深度剖析
- #define和const的区别
- const和#define的区别(各角度理解)
- C语言 #define和const区别
- C语言编程技巧 关于const和#define的区别
- C++中#define、typedef和const的区别
- C语言 #define 与 const的区别
- #define与const的区别
- const与#define的区别
- const 和 #define区别
- C++编程中const和#define的区别
- 【C++】#define和const的区别
- [C/C++] const和#define的区别
- const、#define、typedef和inline的区别
- const 和 #define 的区别
- #define和const的区别
- ios static 优点 作用 和 #define const 区别
- #define和const定义常量的区别
- const与#define的特点与区别