私が理解したことから、静的メンバーを.hではなく.cppファイルで初期化する理由は、メンバーの複数のインスタンスを取得するリスクがないためです。次の例を見てください。
//Foo.h
#ifndef FOO_H
#define FOO_H
class Foo{
static int a;
};
int Foo::a = 95;
#endif
プリプロセッサディレクティブは、この.hファイルが1回だけコンパイルされるようにします。これにより、静的メンバーのインスタンスが1つだけになります。.cppファイルで静的メンバーを開始する代わりにこれを行うことは可能ですか?