static变量定义在cpp文件的理由和文件作用域

为什么static变量要在cpp文件中定义?

这两天做项目发现如果在类的头文件中定义static 变量,多个包含头文件的cpp文件会链接错误,提示重定义。

static如果定义在文件中,它的作用域是当前文件

在其他文件中是不可见的,也就是说如果头文件A.h中定义了一个变量static int a = 100,然后cpp文件A01.cpp和A02.cpp都包含了A.h.那么两个cpp中的a的地址是不同的。可以正常编译通过。

按理来说#include<>命令指示简单的将 .h 的内容拷贝过来,即使类中的变量同名,那么也是互不可见的呀?·


                                         华丽的分割线

命名空间可以跨多个文件

正如多个标准库文件中都定义了namespace std 命名空间,他们是同一个命名空间

类名也是一个命名空间

所以不同的cpp文件包含同一个.h文件的话,如果在.h文件中定义static变量,则在同一关命名空间中定义多次。

习惯上总是把同一个类的.h和.cpp文件写成同一个名字 A.h对应A.cpp 但是其实可以在B.cpp包含A.h 并在B.cpp定义class A一样可以通过。

猜你喜欢

转载自blog.csdn.net/weixin_36292173/article/details/81085517
今日推荐