为什么一个无名的命名空间是静态的“优越”select?
C ++标准中的$ 7.3.1.1 / 2节读取:
在名称空间范围内声明对象时,不推荐使用static关键字; 无名命名空间提供了一个优越的select。
我不明白为什么一个无名的命名空间被认为是一个优越的select? 基本原理是什么? 我已经知道标准所说的很长一段时间了,但是我从来没有认真考虑过这个问题,即使我回答了这个问题: 无名的命名空间比静态的优越性?
它被认为是优越的,因为它也可以应用于用户定义的types,正如我在我的答案中所述 ? 或者还有其他一些原因,我不知道? 我在问这个问题,特别是因为这是我的答案,而标准可能还有别的想法。
- 正如你所提到的,名称空间适用于任何事物,而不仅仅是函数和对象。
- 正如Greg指出的那样,
static
意味着已经有太多东西了。 - 命名空间在全局范围内提供统一和一致的控制可见性的方法。 你不必为同一件事情使用不同的工具。
- 当使用匿名名称空间时,函数/对象名称会被正确地修改,这样可以在解除绑定之后在符号表中看到类似“(匿名命名空间):xyz”的东西,而不仅仅是具有静态链接的“xyz” 。
- 正如在下面的评论中所指出的那样,不允许使用静态的东西作为模板参数,而使用匿名命名空间就没有问题。
- 更多? 也许吧,但现在我想不出其他什么了。
一个原因可能是static
已经有太多的意义(我可以算作至less三个)。 由于匿名名称空间可以封装任何types,所以它似乎优于static
解决scheme。
我认为有两个原因:
-
static
有两个不同的含义:在类作用域,这意味着全class共享,而在文件/function范围,它影响的可见性/存储… - 未命名的命名空间允许声明新的
struct
,class
和typedef
值得注意的是, n3225
表示反对: static
在n3225
不再被标记为废弃。
无论他们有什么原因,他们改变了主意: http : //crazycpp.wordpress.com/2011/01/18/static-keyword-is-back/