静力学需要上课吗?

时间:2015-04-30 09:18:54

标签: c++ static

直到现在我才真正尝试过。 是否可以在没有类的情况下在命名空间范围内使用静态? 为什么不呢?

namespace MyNamespace
{
  static int a;
}

assign something, somewhere else....

1 个答案:

答案 0 :(得分:4)

附件D(兼容性特征)[C ++ 03]

  

D2:在声明命名空间范围内的对象时,不推荐使用static关键字。

命名空间范围内的

static变量(全局或其他)具有内部链接。这意味着,无法从其他翻译单元访问它。它是声明它的翻译单元的内部。

<强>更新
当您将变量声明为static时,表示其范围仅限于给定的翻译单元。没有静态,范围是全局的。

在.h文件中声明变量为static (在命名空间内或没有命名空间;并不重要),并将该头文件包含在各种.cpp文件中,静态变量在本地范围内变为每个.cpp文件。 所以现在,包含该标头的每个.cpp文件都有自己的变量副本。

如果没有 static关键字,编译器将只生成该变量的一个副本,因此只要您将头文件包含在 multiple .cpp文件链接器会抱怨多个定义