将静态常量和常量声明为未命名的命名空间有什么区别?

时间:2014-05-13 12:49:26

标签: c++ static namespaces const

据我所知,有两种方法可以声明一个仅在一个文件中可见的常量变量:

  1. 声明static const int VARIABLE = 1
  2. 在未命名的命名空间中声明它:
  3. namespace { const int VARIABLE = 1; }
    

    那有什么区别?

1 个答案:

答案 0 :(得分:3)

由于它是const,因此两者都有内部联系,并没有区别。因此,让我们考虑更有趣的案例,它不是const

在那种情况下,实际上,差别很小。

从技术上讲,第一个会有内部链接,因此无法从另一个翻译单元访问该名称;第二个将具有外部链接,但无法从另一个翻译单元访问,因为其周围的名称空间无法命名。