关于 #define 和 const 优劣
我们肯定见到过 在某些地方 用宏 #define来声明常量 #define PI 3.14159 这样的用法肯定不陌生;
不过我们也常看到 const enum 等 来 定义常量,const 的用法最多见。
俗话说 事物存在总有它存在的理由。 我想问问 什么时候用 #define ? 什么时候用const ? 又是什么原因。
有人能总结下 帮忙解答疑问吗? 谢谢!
[解决办法]
- C/C++ code
#define//简单的变量替换,不会有类型检查如:#define ABC "abc"const//会有类型检测,如下就会报错const int = "abc";
[解决办法]
这种问题教材上就有吧?
百度结果:
1.差别:
const与#define最大的差别在于:前者在堆栈分配了空间,而后者只是把具体数值直接传递到目标变量罢了。或者说,const的常量是一个Run-Time的概念,他在程序中确确实实的存在可以被调用、传递。而#define常量则是一个Compile-Time概念,它的生命周期止于编译期:在实际程序中他只是一个常数、一个命令中的参数,没有实际的存在。
const常量存在于程序的数据段.
#define常量存在于程序的代码段。
2优缺点:
至于两者的优缺点,要看具体的情况了。
#define 优点
i.从run-time的角度来看,他在空间上和时间上都有很好优势。
ii.从compile-time的角度来看,类似m=t*10的代码不会被编译器优化,t*10的操作需要在run-time执行。而#define的常量会被合并。
缺点
没有类型检查
const 优点
有类型检查
去点
参考#define优点。
[解决办法]
define少用是因为,功力不够容易出错,且编译运行都没有问题,只是结果不是自己想要的结构,在大的项目中,排查有难度,尤其是定义了一大堆define函数的情况下