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