我应该使用静态还是命名空间

Should I use static or a namespace?

本文关键字:命名空间 静态 我应该      更新时间:2023-10-16

我有一个专用的硬件寄存器头文件,我创建了一个命名空间,如下所示,其中包含我所有的硬件寄存器地址:

namespace{
 const uint32_t Register1                    = (0x00000000);
 const uint32_t Register2                    = (0x00000004);
 const uint32_t Register3                    = (0x00000008);
 const uint32_t Register4                    = (0x0000000c);
}

这是否被认为比使用:

 static const uint32_t Register1             = (0x00000000);
 static const uint32_t Register2             = (0x00000004);
 static const uint32_t Register3             = (0x00000008);
 static const uint32_t Register4             = (0x0000000c); 

我想命名空间的重点是我们不会污染全局命名空间。 是吗?

我有一个.cpp,它使用头文件。

两者本质上是等价的。

全局static方法在C++03([depr.static])中被弃用,取而代之的是未命名的命名空间,但后来被C++11弃用,因为每个人都意识到在一般情况下,一个没有客观的好处。

但是,为此,您可能会发现enumenum class更易于管理和惯用。

这两个

是 100% 等效的,它们也是 100% 等效于省略namespacestatic

const uint32_t Register1                    = (0x00000000);
const uint32_t Register2                    = (0x00000004);
const uint32_t Register3                    = (0x00000008);
const uint32_t Register4                    = (0x0000000c);

原因很简单 - 除非您明确声明它extern,否则const变量是static

但是,这看起来像是最好使用枚举的东西。