使用静态const变量比使用#define preprocessor更好吗?或者这取决于上下文?
每种方法的优点/缺点是什么?
使用静态const变量比使用#define preprocessor更好吗?或者这取决于上下文?
每种方法的优点/缺点是什么?
当前回答
使用静态const就像在代码中使用任何其他const变量一样。这意味着您可以跟踪信息的来源,而不是在预编译过程中简单地在代码中替换#define。
对于这个问题,你可能想看看c++ FAQ Lite: http://www.parashift.com/c++-faq-lite/newbie.html#faq-29.7
其他回答
使用预处理器指令#define定义常量不仅不建议应用在c++中,也不建议应用在C中。甚至在C语言中,也有人建议用const表示常量。
总是喜欢使用语言特性,而不是一些额外的工具,如预处理器。
ES.31:不要将宏用于常量或“函数” 宏是bug的主要来源。宏不服从通常的作用域 以及类型规则。宏不遵循通常的参数规则 传递。宏确保人类读者看到不同的东西 从编译器看到的。宏使工具构建复杂化。
来自c++核心指南
作为一个相当老和生疏的C程序员,他从来没有完全学会c++,因为其他东西出现了,现在正在努力掌握Arduino,我的观点很简单。
#define是一个编译器预处理器指令,应该这样使用,用于条件编译等。例如,低级代码需要定义一些可能的替代数据结构,以移植到特定的硬件。它会根据模块编译和链接的顺序产生不一致的结果。如果你需要某些东西在范围上是全局的,那么就这样正确地定义它。
Const和(static Const)应该总是用来命名静态值或字符串。它们是类型化的、安全的,调试器可以完全使用它们。
枚举总是让我感到困惑,所以我设法避免使用它们。
使用静态const就像在代码中使用任何其他const变量一样。这意味着您可以跟踪信息的来源,而不是在预编译过程中简单地在代码中替换#define。
对于这个问题,你可能想看看c++ FAQ Lite: http://www.parashift.com/c++-faq-lite/newbie.html#faq-29.7
请看这里:static const vs define
通常使用const声明(注意它不需要是静态的)