我在一次技术面试中被问到了这个问题:
C++中
const
与宏之间有什么区别?
我的答案是宏是预处理指令,如果使用宏,由于在编译前替换为常量表达式,因此可能很难调试应用程序。相比之下,const
可以具有类型标识符,并且易于调试。
还有其他区别吗?应该优先使用哪种方法?
编辑:
根据IBM的C++文档:
#define
和const
类型限定符之间的一些区别如下:
#define
指令可用于创建数字、字符或字符串常量的名称,而任何类型的const
对象都可以声明。与使用
#define
创建的常量不同,const
对象受变量作用域规则的约束。与const
对象不同,宏的值不会出现在编译器使用的中间源代码中,因为它们进行内联扩展。内联扩展使得宏值对调试器不可用。宏可以用于常量表达式,例如数组大小的定义,而
const
对象不能。(我认为我们肯定需要使用宏来定义array_size
)。编译器不会对宏进行类型检查,包括宏参数。