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

时间:2015-01-28 13:34:51

标签: c++ static namespaces

我有一个专用的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,它使用头文件。

2 个答案:

答案 0 :(得分:5)

两者基本相同。

全局 - static方法在C ++ 03([depr.static])中已弃用,而不支持未命名的命名空间,但随后undeprecated by C++11,因为每个人都认识到there is no objective benefit of one over the other情况下。

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

答案 1 :(得分:3)

这两个是100%等效的,它们也相当于省略了namespacestatic

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

原因很简单 - const变量为static,除非您明确声明extern

但是,这似乎更适合使用枚举。