"私人" cpp文件中命名空间作用域中的变量

时间:2016-01-16 11:27:52

标签: c++

在源文件(不是头文件)中,我习惯于放置一些只有实现可以使用的状态:

//.cpp

namespace foo{

   someType bar;

   //... functions and objects that might use bar ...

}

因为只在此cpp文件中声明了bar,所以其他代码文件无法使用它,对吗?

但请注意,我没有在其前面放置static。但在这种情况下,这应该没什么区别?

没有static,唯一的区别是这个变量可以被另一个代码文件访问(并实际设置),如果在其他文件中 - 无论是标题还是cpp - 我有一个extern声明相同的变量名称? (当然,这个声明是在同名的命名空间内)

由于我在代码库中的任何其他位置都没有任何此类extern声明,因此我认为无论是否将其标记为static都没有区别 - 但我想确保我的想法是正确的。

1 个答案:

答案 0 :(得分:2)

你是对的,名称空间范围内的变量static仅控制来自其他翻译单元的变量的可见性(内部与外部链接)。除此之外,变量的行为将保持不变。例如,存储类将保持静态。唯一的区别是没有static声明

namespace foo{
    extern someType bar;
    ...
}
来自其他一些翻译单元的

将“连接”到您的bar变量,而使用static时,extern会在链接时失败。