在 cpp 文件中命名空间范围内"Private"变量

"Private" variable in namespace scope in cpp file

本文关键字:Private 变量 范围内 命名空间 cpp 文件      更新时间:2023-10-16

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

//.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将在链接时失败。