在 C++ 中定义的最佳实践是什么?

Rar*_*usu 0 c++ standards c-preprocessor

我想知道是否有关于在 C++ 语言中使用 Define 的任何官方建议,确切地说最好在头文件或源文件中定义?
我问这个是为了知道是否有任何官方标准可以遵循,或者只是简单的主观标准......我不需要整套标准,但来源或指南的链接就足够了。


稍后编辑:
对这一事实的解释是什么?constconstexpr已成为现状,我指的是用作define避免重复键入的手段,在我看来很清楚,程序员应该充分利用 c++ oop 编译器的潜力。另一方面,如果它如此令人恐惧,为什么不完全删除它呢?我的意思是,据我了解,define它仅用于条件编译,特别是使相同的代码在不同的编译器上工作。
其次,小问题,潜在的错误也是java没有真正的C风格的主要原因define

hyd*_*yde 5

C++ 使用指南的简短列表#define,第 2、4、6 和 7 点实际上解决了这个问题:

  1. 避开他们
  2. 将它们用于头文件中常见的“包含保护”模式
  3. 否则,不要使用它们,除非您可以解释为什么使用#define而不是constconstexpr、内联函数或模板函数等。
  4. 使用它们允许从编译器命令行提供编译时选项,但仅当将该选项作为运行时选项不可行或不理想时。
  5. 当您使用的任何库需要使用它们时使用它们(例如:禁用assert()函数
  6. 一般来说,把一切都放在尽可能狭窄的范围内。对于宏的某些用途#define,这意味着#define在 .cpp 文件中的函数之前,然后#undef在该函数之后。
  7. 的确切用例#define决定了它是否应该在文件.h.cpp。但请注意,大多数用例实际上都违反了上面的 3.,并且您实际上不应该使用#define.