在源文件(不是头文件)中,我习惯于放置一些只有实现可以使用的状态:
//.cpp
namespace foo{
someType bar;
//... functions and objects that might use bar ...
}
因为只在此cpp文件中声明了bar
,所以其他代码文件无法使用它,对吗?
但请注意,我没有在其前面放置static
。但在这种情况下,这应该没什么区别?
没有static
,唯一的区别是这个变量可以被另一个代码文件访问(并实际设置),如果在其他文件中 - 无论是标题还是cpp - 我有一个extern
声明相同的变量名称? (当然,这个声明是在同名的命名空间内)
由于我在代码库中的任何其他位置都没有任何此类extern
声明,因此我认为无论是否将其标记为static
都没有区别 - 但我想确保我的想法是正确的。
答案 0 :(得分:2)
你是对的,名称空间范围内的变量static
仅控制来自其他翻译单元的变量的可见性(内部与外部链接)。除此之外,变量的行为将保持不变。例如,存储类将保持静态。唯一的区别是没有static
声明
namespace foo{
extern someType bar;
...
}
来自其他一些翻译单元的将“连接”到您的bar
变量,而使用static
时,extern
会在链接时失败。