为什么匿名命名空间优先于静态全局变量?

时间:2011-11-25 05:03:23

标签: c++ static namespaces

  

可能重复:
  Superiority of unnamed namespace over static?
  Why unnamed namespace is a“ superior” alternative to static?

我知道知道匿名命名空间被“鼓励”超过静态全局变量,它们更像C(并且已弃用)等等,我经常自己使用它们。但是,尽管已经阅读了有关此主题的其他帖子和问题,但我还没有真正看到为什么匿名命名空间优于一组简单的静态全局变量的明确原因。

我有理由坚持前者吗?

1 个答案:

答案 0 :(得分:3)

不再弃用命名空间范围内的静态变量。

没有特别的理由偏爱一个而不是另一个。偏好未命名的命名空间的一个小理由是你可以在其中声明任何内容,而只有函数和变量可以是静态的。偏好静态声明的一个小理由是你没有额外的大括号围绕声明游荡。使用对你来说更和谐的一切。

历史记录:在C ++ 11之前,有一个理由偏好命名空间:出于某些奇怪的原因,指向static对象或函数的指针不能用作模板参数,而指针指向非{ {1}}有人可以。 C ++ 11删除了这个限制,以及同样奇怪的限制,例如,本地类型是模板参数。