C++の静的変数(static variable)とは?使い方・特徴・注意点をやさしく解説!
C++には「静的変数(Static Variable)」という特殊な変数があります。
これは、関数の中やクラスの中など、さまざまな場所で使われ、通常の変数とは異なる寿命とスコープを持ちます。
この記事では、静的変数の基本的な使い方から、関数内・クラス内での使い分け、注意点まで初心者向けに解説します。
静的変数(static変数)とは?
静的変数とは、プログラムの実行中ずっとメモリ上に存在し続ける変数のことです。
通常のローカル変数は関数が終わると消えますが、static
を付けた変数は関数が終わっても値を保持します。
関数内の静的変数の例
#include <iostream>
using namespace std;
void countUp() {
static int count = 0; // 最初の1回だけ初期化
count++;
cout << "呼び出し回数: " << count << endl;
}
int main() {
countUp(); // 1
countUp(); // 2
countUp(); // 3
return 0;
}
この例の count
は関数の中にあるにもかかわらず、関数が呼び出されるたびに前の値を保持しています。
グローバル変数との違い
グローバル変数はどこからでもアクセスできますが、関数内の static 変数は外部からアクセスできません。
つまり、データの持続性を持ちながら、スコープを制限できるのが特長です。
クラスの静的メンバ変数
クラスでも static
を使うことで、インスタンスに依存しない共有変数が定義できます。
class Counter {
public:
static int total; // 静的メンバ変数(宣言)
Counter() {
total++;
}
};
int Counter::total = 0; // 静的メンバ変数の定義(クラス外)
int main() {
Counter a, b, c;
cout << "作られたインスタンス数: " << Counter::total << endl; // → 3
}
このように、static
を使えば、全インスタンスで共通の値を扱うことができます。
静的変数の特徴
- 一度だけ初期化され、値が保持される
- 関数が終了しても変数は破棄されない
- グローバル変数とは異なり、スコープは限定的
使いどころ
- 関数の呼び出し回数をカウントしたいとき
- オブジェクトの総数など、クラス単位の情報を扱いたいとき
- 一時的な情報を保持したいが、外部に公開したくないとき
注意点
- 静的変数はプログラムの終了までメモリに残る(メモリ使用に注意)
- マルチスレッド環境では競合に注意(mutexなどの排他制御が必要)
まとめ
C++の静的変数(static variable)は、「長く生きるがスコープは限定される」特殊な変数です。
関数内で値を保持したり、クラス全体で共有する用途にぴったりです。
まずは、関数内で使ってみて、状態を保持できることを体感し、必要に応じてクラスでも活用してみましょう!