【发布时间】:2011-09-17 15:17:45
【问题描述】:
我在一次技术面试中被问到这个问题:
const和 C++ 中的宏有什么区别?
我的回答是宏是一个预处理器指令,如果使用宏可能很难调试应用程序,因为它在编译之前被常量表达式替换,而 const 可以有一个类型标识符并且是易于调试。
谁能指出任何其他区别,哪个应该是首选?
编辑:
来自 IBM 的 C++ 文档:
以下是
#define和const类型限定符之间的一些区别:
#define指令可用于为数字、字符或字符串常量创建名称,而可以声明任何类型的 const 对象。const 对象受变量范围规则的约束,而使用
#define创建的常量则不受约束。与const对象不同,宏的值不会出现在编译器使用的中间源代码中,因为它们是内联扩展的。内联扩展使宏值对调试器不可用。宏可用于常量表达式,例如绑定数组,而
const对象不能。 (我想我们肯定需要使用宏来定义array_size。编译器不对宏进行类型检查,包括宏参数。
【问题讨论】:
-
规则“宏可以用于常量表达式,例如绑定数组,而常量对象不能。”仅适用于 C,不适用于 C++。