直到现在我才真正尝试过.是否可以在没有类的情况下在命名空间范围内使用静态?为什么不?
namespace MyNamespace
{
static int a;
}
assign something, somewhere else....
Run Code Online (Sandbox Code Playgroud)
附录 D(兼容性功能)[C++03]
D2:在命名空间范围内声明对象时,不推荐使用 static 关键字。
static命名空间范围(全局或其他)的变量具有内部链接。这意味着,无法从其他翻译单元访问它。它位于声明它的翻译单元的内部。
update
当您将变量声明为 时static,这意味着它的范围仅限于给定的翻译单元。如果没有静态,范围是全局的。
static 当您在 .h 文件中声明变量(在命名空间内或没有命名空间;无关紧要),并将该头文件包含在各个 .cpp 文件中时,静态变量的作用域将变为每个 .cpp 文件的本地作用域。因此现在,包含该标头的每个 .cpp 文件都将拥有该变量自己的副本。
如果没有关键字static,编译器将仅生成该变量的一份副本,因此一旦您将头文件包含在多个.cpp 文件中,链接器就会抱怨多个定义。