直到现在我才真正尝试过。 是否可以在没有类的情况下在命名空间范围内使用静态? 为什么不呢?
namespace MyNamespace
{
static int a;
}
assign something, somewhere else....
答案 0 :(得分:4)
附件D(兼容性特征)[C ++ 03]
命名空间范围内的D2:在声明命名空间范围内的对象时,不推荐使用static关键字。
static
变量(全局或其他)具有内部链接。这意味着,无法从其他翻译单元访问它。它是声明它的翻译单元的内部。
<强>更新强>
当您将变量声明为static
时,表示其范围仅限于给定的翻译单元。没有静态,范围是全局的。
在.h文件中声明变量为static
(在命名空间内或没有命名空间;并不重要),并将该头文件包含在各种.cpp文件中,静态变量在本地范围内变为每个.cpp文件。
所以现在,包含该标头的每个.cpp文件都有自己的变量副本。
如果没有 static
关键字,编译器将只生成该变量的一个副本,因此只要您将头文件包含在 multiple 中 .cpp文件链接器会抱怨多个定义。