繁体   English   中英

为什么在CPP中有定义的常量和声明的常量?

[英]Why are there defined constants and declared constants in CPP?

为什么有两种方法可以在CPP中“声明”常量?
哪个更好,或者我应该写,我应该在哪个时候使用?

#define MYCON 100
const int MYCON=100

简短规则:对于条件编译(如DEBUG和RELEASE的不同代码片段),使用#define 对于所有其他情况,使用const构造。

使用#define会产生一个预处理器符号:在预处理发生后它根本不存在,并且相当于在文件中输入“100”。

预处理器符号的功能:

  • 您可以在#ifdef预处理程序指令中使用它们
  • 它有词汇范围
  • 不能拿他们的地址(因此不能将它们用作期望type*参数)

使用const type声明一个c ++变量。

  • 不能在预处理器指令中使用这个东西
  • 它遵循通常的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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM