C++では、
struct で宣言すると
フィールドは全部グローバル宣言
static は 関数内のみ使用可能、その他いろいろ制限有り。
使いづらい。
クラス内で static変数を用意するとややこしいことになり、
たぶん自分がstaticの使い方をよくわかっていないかもしれない。
関数内で使用する場合、ブロックから出てもずっと消えずに覚えてくれるので便利。
C# での struct は、
意味が変わり、
静的にメモリーを保持、
フィールドは、省略すると private
static は クラス内で使用すると、そのクラスのインスタンスをいくら増殖させても
static で宣言された変数は増殖しない。メモリー上に1つしか存在しない。
それのみになる。
ちなみにC++でもC#の static の同様、メモリー上で1つしか存在しないようにできるが、
少々記述ルールがややこしい。
http://www.geocities.jp/ky_webid/cpp/language/019.html
これらの、static変数をうまく使えば、
クラスのクラスの・・・というややこしさの回避を少しでも減らせられるが、
C++の場合、グローバル変数の宣言みたいのをしないといけないのがややこしい。
static変数はインスタンス化されないという仕様(バグ?)は分からず
はまった。
さすがにC#ではそんなことがないので良かった。さすがC++から18年後に開発された言語だけある。
結論から言うと、C++とC#で
なんかしらの微妙な違いがある可能性があるので、
クラスや構造体関係では
public private など省略しない方が無難かもしれない。
さらにまとめで、
static >>> public で宣言しようが自動的に隠蔽化され privateと同じ扱いに(C#)
public で宣言できるし、効果がある(C++)
C++ では記述がややこしくなり、スコープがすぐに効かなくなる。しかもインスタンス化されない!別途グローバル変数宣言が必要。
とにかく、static を クラス内に使用する場合、注意が必要
グローバル変数の別の書き方と考えるとしっくりくる
つまり、static の場合、フィールドでの変数名がそのままグローバル変数になる、と考える。