又一个静态的问题.
我已阅读以下内容:
我已阅读以下内容:
> What are static variables?
> file scope and static floats
> http://msdn.microsoft.com/en-us/library/s1sb61xd.aspx
我仍然不了解以下行为:
我有一个h文件:
// StaticTest.h #include <stdio.h> static int counter = 0; struct A { A () { counter++; printf("In A's ctor(%d)\n",counter); } ~A () { counter--; printf("In A's dtor(%d)\n",counter); } }; static A a;
和两个cpp文件:
// StaticTest1.cpp #include "StaticTest.h" int main () { return 0; }
和:
// StaticTest2.cpp #include "StaticTest.h"
程序的输出是:
In A's ctor(1) In A's ctor(2) In A's dtor(1) In A's dtor(0)
现在,A的构造函数被调用两次,因为h文件被包含两次,并且由于A的名为a的实例被声明为静态,所以它具有内部链接,并且编译器很开心.
由于计数器也被声明为静态,它也具有内部链接,我希望它的值不会在两个cpp文件中共享 – 但是程序输出意味着该值是共享的,因为它最多可达2.
任何见解?
编辑:
在h与cpp文件中声明静态变量的背景下,关于什么被认为是“良好的编程习惯”的任何答案也是受欢迎的.