C++ &引用;“私人”;cpp文件中命名空间作用域中的变量
在源文件(不是头文件)中,我习惯于放置一些只有实现才能处理的状态:C++ &引用;“私人”;cpp文件中命名空间作用域中的变量,c++,C++,在源文件(不是头文件)中,我习惯于放置一些只有实现才能处理的状态: //.cpp namespace foo{ someType bar; //... functions and objects that might use bar ... } 由于bar仅在此cpp文件中声明,其他代码文件不可能使用它,对吗 但是请注意,我没有将static放在它前面。不过,在这种情况下,这应该没有什么区别吧 如果没有static,唯一的区别是,如果在其他文件(header或cpp)中,我
//.cpp
namespace foo{
someType bar;
//... functions and objects that might use bar ...
}
由于bar
仅在此cpp文件中声明,其他代码文件不可能使用它,对吗
但是请注意,我没有将static
放在它前面。不过,在这种情况下,这应该没有什么区别吧
如果没有static
,唯一的区别是,如果在其他文件(header或cpp)中,我对同一个变量名有extern
声明,那么这个变量可以被另一个代码文件访问(并实际设置)吗?(当然,该声明位于相同名称的命名空间中)
由于我在代码库的其他地方没有任何这样的
extern
声明,因此我推断,无论我是否将其标记为static
,都没有区别——但我想确保我的想法是正确的。您是正确的,命名空间范围中变量的静态仅控制来自其他转换单元(内部链接与外部链接)的变量的可见性。除此之外,变量的行为将保持不变。例如,it存储类将保持静态。唯一的区别是没有静态
声明
namespace foo{
extern someType bar;
...
}
其他翻译单元将“连接”到您的代码> Bar < /C>变量,而<>代码> static < /C> >