AnT*_*AnT 40
#define
有许多不同的应用程序,但您的问题似乎是关于一个特定的应用程序:定义命名常量.
在C++中,很少有理由使用它#define
来定义命名常量.
#define
通常在C代码中广泛使用,因为在定义常量时C语言与C++有很大不同.简而言之,const int
对象不是C中的常量,这意味着在C中定义真常量的主要方法是使用#define
.(另外,对于int
常量,可以使用枚举).
Alo*_*ave 39
没有人不应该!
其实,每个人都应该喜欢const int sum = 1;
上#define sum 1
了几个原因:
基于范围的机制:
#define
s不尊重范围,因此无法创建类范围的命名空间.虽然const变量可以在类中作用域.
在编译错误期间避免奇怪的魔法数字:
如果您正在使用#define
它们在预编译时被预处理器替换那么如果您在编译期间收到错误,那将会引起混淆,因为错误消息不会引用宏名称而是值,它将显示为突然值,并且一个人会浪费很多时间在代码中跟踪它.
易于调试:
同样出于#2中提到的相同原因,虽然调试#define
实际上没有提供任何帮助.
因此,避免上述情况const
将是更好的选择.
对于你刚给出的例子,我通常会使用const.除了当然,#define可以用于其他地方的条件编译:
#if SOME_DEFINE == 1
// Conditional code
#endif
Run Code Online (Sandbox Code Playgroud)
这是const无法做到的事情.如果您不需要从预处理器访问该值,我会说使用const,除非有一些原因导致这是不可能的.在C++ FAQ lite中有一些内容,他们正确地指出,仅仅因为预处理器是"邪恶的",它并不意味着你永远不需要它.
归档时间: |
|
查看次数: |
24627 次 |
最近记录: |