我有一个专用的HW寄存器头文件,我创建了一个名称空间,就像这样,它保存了我所有的HW寄存器地址:
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,它使用头文件。
答案 0 :(得分:5)
两者基本相同。
全局 - static
方法在C ++ 03([depr.static]
)中已弃用,而不支持未命名的命名空间,但随后undeprecated by C++11,因为每个人都认识到there is no objective benefit of one over the other情况下。
但是,为此,您可能会发现enum
或enum class
更易于管理和惯用。
答案 1 :(得分:3)
这两个是100%等效的,它们也相当于省略了namespace
和static
:
const uint32_t Register1 = (0x00000000);
const uint32_t Register2 = (0x00000004);
const uint32_t Register3 = (0x00000008);
const uint32_t Register4 = (0x0000000c);
原因很简单 - const
变量为static
,除非您明确声明extern
。
但是,这似乎更适合使用枚举。