ランダムで不完全な図を次に示します。
class Foo; // (incomplete forward) class declaration
class Foo { // class definition
int a; // member declaration + definition
int b(int, int); // member function declaration
static int c; // static member declaration
};
int Foo::b(int a, int b) { return a+b; } // member function definition
int Foo::c; // static member defintion
int bar(int); // free function declaration
int main() { // free function declaration + definition
int q; // declaration + definition
q = bar(0);
return q;
}
int bar(int a) { return 2 * a; } // free function definition
おそらく、「静的メンバー定義」は、他の場所で宣言されたオブジェクトの実際のオブジェクトインスタンス(つまり、割り当てと構築)を提供するという意味で一意です。これは、純粋な外部宣言にのみ匹敵します。
extern int N; // declaration only, no definition
外部の可視性を備えた宣言+定義と混同しないでください。
extern const int M = 11; // declaration and definition