注册 登录
编程论坛 C++教室

[求助]const与#define

zptk720 发布于 2007-09-02 11:24, 735 次点击

使用关键字const而不是#define语句的好处有哪些??

5 回复
#2
柳儿2007-09-02 12:23
使用#define的话,只是简单的文本替换。
感觉,const的话,常量至少还有数据类型。
编译的时候,编译器可以对const进行类型检查,但是对#define就无能为力了。
如果用#define引起错误,很难查出来的。
#3
duffebear2007-09-02 13:16


“尽量使用编译器而不用预处理”

#define ASPECT_RATIO 1.653

编译器会永远也看不到ASPECT_RATIO这个符号名,因为在源码进入编译器之前,它会被预处理程序去掉,于是ASPECT_RATIO不会加入到符号列表中。如果涉及到这个常量的代码在编译时报错,就会很令人费解,因为报错信息指的是1.653,而不是ASPECT_RATIO。如果ASPECT_RATIO不是在你自己写的头文件中定义的,你就会奇怪1.653是从哪里来的,甚至会花时间跟踪下去。这个问题也会出现在符号调试器中,因为同样地,你所写的符号名不会出现在符号列表中。
解决这个问题的方案很简单:不用预处理宏,定义一个常量:

const double ASPECT_RATIO = 1.653;


#4
wsy2007-09-03 22:54
const常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查。而对后者只进行字符替换,没有类型安全检查,并且在字符替换可能会产生意料不到的错误(边际效应)。
有些集成化的调试工具可以对const常量进行调试,但是不能对宏常量进行调试。
#5
绝种好小伙2007-09-04 09:55
说的不错,应该就是这个意思
#6
dart2007-09-04 20:52
呵呵,是个好主意........
1