static修飾子(c++)
ETロボコン用のコード見ていたら気になったので。
static修飾子ってどれに修飾するかで意味が異なってくるんですよね。今まで気にしていませんでしたが結構ややこしいものだなと思いました。
static修飾子がついたものは静的〇〇と呼ばれます。
静的ローカル変数
プログラムが終了するまで存在し続けます。
初期値を入れなかった場合は0が自動的に入ります。
静的グローバル変数
他のファイルから参照できなくります。
別につけなければ他ファイルから参照出来るわけではないですが、つけておけば完全に他ファイルから参照されることはありません。他ファイルから参照したい場合はextern修飾子について調べると出てくると思います。
c++では静的グローバル変数は推奨されていないのでnamespaceを使った方がいいみたいです。
静的メンバ変数
複数の同じインスタンスに対して一つしか存在しません。 インスタンスを生成せずに参照する事ができます。
クラス内で宣言しても実態はできません。別のところで宣言しないといけません。
静的メンバ関数
インスタンスを生成せず参照することができます。
staticなメンバ関数(静的メンバ関数)からstaticではないメンバ変数を使うことはできません。
静的クラス
メンバーすべてにstatic修飾子がついているクラスを指します
メンバーがすべて静的な場合わざわざインスタンス生成する必要はないのでコンストラクタは書く必要はないでしょう。
Javaとかではまた別の意味がありそうなのでまた今度書こうかなと思います。