还有一个static
问题。我已阅读以下内容:
而且我仍然无法理解以下行为:我有一个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
名为的实例,它具有内部链接并且编译器很高兴。由于它也被声明为静态,它也具有内部链接,我希望它的值不会在两个文件中共享 --- 但程序输出暗示该值是共享的,因为它最多为 2。a
static
counter
cpp
有什么见解吗?
h
编辑:在vs.文件中声明静态变量的上下文中,关于什么被认为是“良好的编程习惯”的任何答案cpp
也受到欢迎。