据我所知,有两种方法声明一个只在一个文件中可见的常量变量:
- 声明
static const int VARIABLE = 1
- 在一个未命名的命名空间中声明它:
namespace { const int VARIABLE = 1; }
那么它们有什么区别呢?
据我所知,有两种方法声明一个只在一个文件中可见的常量变量:
static const int VARIABLE = 1
namespace { const int VARIABLE = 1; }
那么它们有什么区别呢?
既然是const
,那么两者都具有内部链接,没有区别。因此,让我们考虑更有趣的情况,即它不是const
。
在这种情况下,实际上几乎没有区别。
从技术上讲,第一个将具有内部链接,因此名称无法从另一个翻译单元中访问;第二个将具有外部链接,但由于其周围的命名空间无法命名,因此无法从另一个翻译单元中访问。
extern
的const
),它们实际上都具有内部链接... - Angew is no longer proud of SOnamespace {
之外,还包括static
,只是作为提示链接器的一种方式。我不确定它是否足够聪明,能够意识到未命名命名空间的内容在其他地方是无法访问的,而我的链接时间如此之长,以至于我愿意抓住任何可能的机会。 - dlf