C++命名空间和静态变量

s.d*_*s.d 6 c++ static namespaces

我有一个要求,其中一个(const)变量应该在整个cpp中可用,它由几个类组成.我决定使用命名空间来解决问题,但不确定以下内容:

  • 我需要将此变量定义为静态吗?
  • 只有当我使用未命名的命名空间时,我才能避免使变量变为静态吗?

bdo*_*lan 7

  1. 您不需要将变量定义为静态,也不需要在匿名命名空间中定义.但是,如果您没有在其定义的文件之外使用此对象,那么减少名称空间污染和加速链接(通过减少链接器需要考虑的符号数量)是一个好主意.
  2. 如果在匿名命名空间中声明变量,它将是有效的静态.实际上也没有必要让它静止(尽管如果你愿意,你也可以).匿名命名空间的优点是您还可以定义类型(类,结构,枚举,类型定义)以及静态变量和函数.