我应该使用静态还是命名空间
Should I use static or a namespace?
我有一个专用的硬件寄存器头文件,我创建了一个命名空间,如下所示,其中包含我所有的硬件寄存器地址:
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弃用,因为每个人都意识到在一般情况下,一个没有客观的好处。
但是,为此,您可能会发现enum
或enum class
更易于管理和惯用。
这两个
是 100% 等效的,它们也是 100% 等效于省略namespace
和static
:
const uint32_t Register1 = (0x00000000);
const uint32_t Register2 = (0x00000004);
const uint32_t Register3 = (0x00000008);
const uint32_t Register4 = (0x0000000c);
原因很简单 - 除非您明确声明它extern
,否则const
变量是static
的
但是,这看起来像是最好使用枚举的东西。
相关文章:
- 如何通过命名空间调用非静态方法
- 匿名命名空间中的const与静态const
- 使用匿名命名空间中的函数或另一个文件中的静态函数不应该出错吗?
- 将typeID转换为静态成员访问(C )的命名空间
- 为什么主可执行文件和 dlopen 加载的共享库共享命名空间静态变量的一个副本?
- 获取封装在命名空间中的静态变量地址
- 静态和匿名命名空间
- C++命名空间中静态函数的链接
- 我应该使用静态还是命名空间
- 使用静态成员充当带有模板的命名空间:坏主意
- 匿名命名空间中的静态结构
- 静态函数中的命名空间
- 如何将类的静态方法引入命名空间
- 对静态类成员使用命名空间
- 命名空间内的 extern const 和静态 const 类成员之间的区别
- C++Singelton类与命名空间与公共静态变量
- 我可以沙盒一个使用静态数据的命名空间吗
- 工厂函数作为类或命名空间中的静态成员
- 静态成员变量和命名空间变量有什么区别?
- 命名空间“静态”是否仍在 C++11 中弃用