さらに別のstatic
質問。私は以下を読みました:
そして、私はまだ次の動作を理解できません:私は1つの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;
そして2つの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)
これで、ファイルが2回含まれてA
いるため、コンストラクターが2回呼び出され、名前付きのインスタンスが宣言されているため、内部リンケージがあり、コンパイラーは満足しています。も静的に宣言されているため、内部リンケージもあり、その値は2つのファイルで共有されないことが予想されますが、プログラム出力は、2までカウントされるため、値が共有されることを意味します。h
A
a
static
counter
cpp
洞察はありますか?
h
編集: vs 。ファイルで静的変数を宣言するという文脈で「良いプログラミング習慣」と見なされるものに関する回答cpp
も歓迎します。