使用static const个变量比使用#define个预处理器更好吗?或者可能这取决于上下文?

每种方法的优点/缺点是什么?

推荐答案

就我个人而言,我讨厌预处理器,所以我总是 Select const.

#define的主要优点是它不需要存储在程序中的内存,因为它实际上只是用一个文本值替换一些文本.它还有一个优点,即它没有类型,因此可以用于任何整数值,而无需生成警告.

"const"的优点是它们可以限定作用域,并且可以在需要传递指向对象的指针的情况下使用.

不过,我不知道你说的"static"到底是什么意思.如果是全局声明,我会将其放在匿名名称空间中,而不是使用static.例如

namespace {
   unsigned const seconds_per_minute = 60;
};

int main (int argc; char *argv[]) {
...
}

C++相关问答推荐

有效地计算由一组点构成的等边三角形和等腰三角形的数量

为什么输出不是从上到下C

为什么内核使用扩展到前后相同的宏定义?

在C++中头文件中声明外部 struct

将常量转换为指针会增加.数据大小增加1000字节

Clang:如何强制运行时错误的崩溃/异常由于-fsanitize=undefined

C中函数类型的前向声明

判断X宏的空性

防止规范模式在C++中 echo 特殊字符

==284==错误:AddressSaniizer:堆栈缓冲区下溢

覆盖读取函数,但当文件描述符为3或4时,我有问题

错误...的多个定义(&Q)首先在这里定义&

-Wnonnull-Compare警告不是具有误导性吗?

将多项式从文件.txt加载到终端时出现问题

传递给函数的 struct 中的数组

未为同一文件中的函数执行DirectFunctionCall

STM32:代码的执行似乎取决于它在闪存中的位置

当另一个指向 const 的指针观察到数据时,通过指针更改数据是否安全?

无法理解 fgets 输出

将数组返回到链表