次のオブジェクトを数える単純なケースである:静的変数の前にクラスのオブジェクトをグローバル空間で宣言することはよく定義されていますか?
A obj; // comes 1st
int A::count = 5; // comes 2nd
g++ produces expected result:今
struct A
{
static int count;
A() { ++ count; }
};
、そのオブジェクトとstatic
メンバーは次のように宣言されています。しかし、A::count
の定義は、グローバル空間内のA
インスタンスの1つの後に来るので、の定義されていない動作であってはなりませんか?
PODはゼロで初期化されます。静的の前方宣言は本当に前方にあるべきですが、Aが宣言されている場所に依存する可能性がありますグローバル、ネームスペースなどの範囲は、物事がどのように初期化されるかに関して重要な違いになります。 – AJG85