【发布时间】:2010-04-20 21:43:02
【问题描述】:
为什么在 CPP 中有两种“声明”常量的方法?
哪个更好,或者我应该写,我应该在什么时候使用它们中的哪一个?
#define MYCON 100
const int MYCON=100
【问题讨论】:
为什么在 CPP 中有两种“声明”常量的方法?
哪个更好,或者我应该写,我应该在什么时候使用它们中的哪一个?
#define MYCON 100
const int MYCON=100
【问题讨论】:
短规则:对于条件编译(例如 DEBUG 和 RELEASE 的不同代码片段),请使用 #define。对于所有其他情况,请使用 const 构造。
【讨论】:
使用#define 会产生一个预处理器符号:预处理器发生后它根本不存在,相当于在文件中输入了“100”。
预处理器符号的特点:
#ifdef
type* 的参数)使用 const type 声明一个 c++ 变量。
人们普遍认为,将const 用于“程序内”常量,#define 仅用于条件编译(这代表了从(非常!)过去的变化,那时您不能总是依赖 c 编译器智能处理const 并首选使用#define)。如果没有别的,这可以让您更好地控制符号的范围。
【讨论】:
在 C 的原始版本中,#define 是唯一可用于声明常量值的方法。这是在编译时而不是在运行时完成的:编译器对每条指令的值进行硬编码。 const 是 C++ 的一个特性(后来以有限的方式添加到 C 中),在 C++ 中建议您使用 const 而不是#define。 const变量实际上存在于内存中,可以在运行时在构造时初始化。
#define 然而,在 C++ 中仍然经常使用,主要用于与编译器的通信。
一些例子:
防止多个类声明的类头包装器:
#ifdef VAL_H
#define VAL_H
// Define class header
#endif // VAL_H
条件编译:
// Comment this line to disable debug output
#define DEBUG
// Some code
#ifdef DEBUG
// Only gets compiled if DEBUG is defined.
cerr << "Debug output here" << endl;
#endif
【讨论】: