#define和const有什么区别?

afa*_*lek 40 c++ const c-preprocessor

可能重复:
为什么有人会使用#define来定义常量?
c ++ C++中的宏和const之间的区别
- 枚举与const对#define

使用#defineconst创建常量有什么区别?有没有比其他的性能优势?当然我更喜欢使用它,const但我会考虑#define它是否具有合适的优势.

Ker*_* SB 77

#define指令是一个预处理器指令; 预编译器在编译器甚至看到之前用它们的主体替换这些宏.可以将其视为自动搜索和替换源代码.

一个const变量声明声明了一个语言中的实际变量,你可以使用......好吧,就像一个真正的变量:取其地址,传递它,使用它,转换它,等等.

哦,性能:也许您认为避免变量的声明可以节省时间和空间,但是任何合理的编译器优化级别都没有区别,因为常量值已经在编译时被替换和折叠.但是你获得了类型检查的巨大优势,并使调试器知道你的代码,因此没有理由不使用const变量.

  • 这方面的一个重要方面是预处理器宏没有任何范围,而`const`值则没有. (19认同)
  • 似乎使用 `const` 比 `#define` 更好 - 那么为什么几乎所有 C 代码库在头文件中广泛使用 `#define`,而不是 `const`? (3认同)
  • @Fred:还有很多-没有类型检查甚至语法检查。它实际上只是文本替换。在#define-vs-const二分法中,宏只是将文字粘贴到代码中... (2认同)
  • @afaolek:测试它并比较程序集。如果可能,任何体面的编译器都会在其中替换常量,因此应该没有区别。(使用宏,编译器每次都必须解析和 lex 并编目文字。) (2认同)

zip*_*ppy 7

#define创建一个由宏预处理器替换的实体,它与常量完全不同,因为根据您定义的内容,它将被视为常量还是不被视为常量.#define的内容可以是任意复杂的,经典的例子是这样的:

#define SQR(x) (x)*(x)
Run Code Online (Sandbox Code Playgroud)

然后如果使用:

SQR(2+3*4)
Run Code Online (Sandbox Code Playgroud)

这将变成:

(2+3*4)*(2+3*4)
Run Code Online (Sandbox Code Playgroud)


归档时间:

查看次数:

76542 次

最近记录:

6 年,4 月 前