c++ - "Private"cpp 文件中命名空间范围内的变量

标签 c++

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

//.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 变量,而使用 staticextern 将在链接时失败.

关于c++ - "Private"cpp 文件中命名空间范围内的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34826408/

相关文章:

c++ - 创建类对象时出错

c++ - 在 C++ 中设置 64 位变量

c++ - 你如何在 C 中使用 void 指针?

c++ - 对象成员变量在函数中更新但不持久化

c++ - DES。弱键!

c++ - 需要帮助查找内存泄漏

android - CMake 链接静态库错误,而 NDK 工作正常

c++ - 低耦合和紧内聚

c++ - QT:图片作为窗口

c++ - CGAL 中的 Fixed_precision_nt 数字类型发生了什么变化?