Еще один статический
вопрос.
Я прочитал следующее:
И я все еще не понимают следующее поведение:
У меня есть один h
файл:
// StaticTest.h
#include
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
с именем объявляется
статическим , у него есть внутренняя компоновка, и компилятор доволен.
Поскольку счетчик
также объявлен статическим, он также имеет внутреннюю привязку, и я ожидаю, что его значение не будет использоваться совместно в двух файлах cpp
, но вывод программы подразумевает значение является общим, так как оно рассчитано до 2.
какие-нибудь идеи?
РЕДАКТИРОВАТЬ:
Также приветствуются любые ответы относительно того, что считается «хорошей привычкой программирования» в контексте объявления статических переменных в файлах h
vs. cpp
.