静态const对命名空间成员有什么影响

min*_*nda 15 c++ static namespaces const

// MyClass.h

namespace MyNamespace {

  static const double GasConstant = 1.987;

  class MyClass
  {
    // constructors, methods, etc.
  };
}
Run Code Online (Sandbox Code Playgroud)

我以前在MyClass声明中声明了GasConstant(并且在源文件中有一个单独的定义,因为C++不支持const非整数类型的初始化).然而,我需要从其他文件访问它,从逻辑上看,它似乎应该驻留在命名空间级别.

我的问题是,static const在这种情况下会产生什么影响?显然const意味着我无法为GasConstant分配新值,但命名空间中的静态成员意味着什么.这类似于文件范围内的静态,其中成员在单元外是不可访问的吗?

Jam*_*kin 7

采用static在命名空间内是*用C++弃用.它通常只能在源文件中看到,其效果是使变量本地化为该源文件.也就是说,另一个源文件可以具有完全相同名称且没有冲突的变量.

在C++中,将变量设置为源文件本地的推荐方法是使用匿名命名空间.

我认为公平地说static你的代码中的标题是完全错误的.

*正如Tom在评论中(以及在此答案中)所指出的那样,C++委员会推翻了static在文件范围内弃用使用的决定,因为这种用法将始终是语言的一部分(例如,对于C兼容性).