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

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

推荐答案

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

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

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

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

namespace {
   unsigned const seconds_per_minute = 60;
};

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

C++相关问答推荐

C语言中的“对象”是什么?

如何获得 C 函数的基本编译二进制代码?

使用R的`.C`接口处理读/写文件

为什么将输出写入正在缓冲的管道

使用 .* 宽度说明符调用 sprintf 时出现奇怪的警告

为什么下面的循环展开会导致错误的结果?

使用管道在两个程序之间进行通信

C中指向结构的指针与指向数组的指针

&> 重定向是如何在 UNIX shell 中实现的?

如何正确拦截 Linux 内核 5.* 中的系统调用?

C中块内的函数声明

printf() - 如何添加前导零 + 填充

为什么这个 .c 文件 #include 本身?

使用 -O3 的冒泡排序比使用 GCC 的 -O2 慢

在 Win32 上双重转换为 unsigned int 被截断为 2,147,483,648

为什么 rand() 在 Linux 上重复数字的频率远高于 Mac?

C 中数组索引的求值顺序(相对于表达式)

并行将 64 位整数中的压缩 8 位整数减 1,没有硬件 SIMD 的 SWAR

为什么不鼓励静态链接 glibc?

C/C++ 中的 const 数组和静态 const 数组有什么区别