●学校情報

講座一覧・募集状況

学習方法

学習サポート

修了生の評価

受講生の横顔

当学院について

入学相談

入学手続

 

●講座情報

技術者養成講座

プログラミング講座

WEB講座

情報処理試験講座

Excel講座

Access講座

 

●関連コラム

関連コラム

関連用語集

 

logo

 

 

関連用語集

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 を使えば、全インスタンスで共通の値を扱うことができます。

静的変数の特徴

  1. 一度だけ初期化され、値が保持される
  2. 関数が終了しても変数は破棄されない
  3. グローバル変数とは異なり、スコープは限定的

使いどころ

  • 関数の呼び出し回数をカウントしたいとき
  • オブジェクトの総数など、クラス単位の情報を扱いたいとき
  • 一時的な情報を保持したいが、外部に公開したくないとき

注意点

  • 静的変数はプログラムの終了までメモリに残る(メモリ使用に注意)
  • マルチスレッド環境では競合に注意(mutexなどの排他制御が必要)

まとめ

C++の静的変数(static variable)は、「長く生きるがスコープは限定される」特殊な変数です。 関数内で値を保持したり、クラス全体で共有する用途にぴったりです。

まずは、関数内で使ってみて、状態を保持できることを体感し、必要に応じてクラスでも活用してみましょう!

 

C++関連用語集

−−−−−  C++  −−−−−

C++のクラス(Class)とは?仕組みと使い方をわかりやすく解説!

C++のオブジェクト(Object)とは?クラスとの関係と役割をわかりやすく解説!

C++のコンストラクタ(Constructor)とは?役割と使い方をやさしく解説!

C++のデストラクタ(Destructor)とは?役割と使い方をやさしく解説!

C++の継承(Inheritance)とは?クラスを拡張する基本テクニック

C++の多態性/ポリモーフィズム(Polymorphism)とは?オブジェクト指向の真髄を解説!

C++のオーバーロード(Overload)とは?関数や演算子を便利に使い分けよう!

C++のオーバーライド(Override)とは?継承と仮想関数の正しい使い方

C++の仮想関数(Virtual Function)とは?ポリモーフィズムを実現する仕組みを解説!

C++の純粋仮想関数(Pure Virtual Function)とは?抽象クラスとの関係も解説!

C++の抽象クラス(Abstract Class)とは?使い方と役割をわかりやすく解説!

C++のテンプレート(Template)とは?型に依存しない汎用的な関数・クラスを作ろう!

C++の名前空間(Namespace)とは?名前の衝突を防ぐ便利な機能

C++の標準テンプレートライブラリ(STL)とは?効率的な開発に必須のライブラリ群

C++のベクター(vector)とは?配列より便利なSTLコンテナを使いこなそう!

C++のイテレータ(Iterator)とは?STLコンテナを自在に操作する鍵

C++の参照(Reference)とは?ポインタとの違いもわかりやすく解説!

C++のポインタ(Pointer)とは?メモリを操る強力な機能をやさしく解説!

C++の動的メモリ確保(Dynamic Memory Allocation)とは?newとdeleteを使いこなそう

C++のnew/delete演算子とは?動的メモリ確保の基本をマスターしよう!

C++の例外処理(Exception Handling)とは?try/catch/throwでエラーに強いプログラムを作ろう

C++のtry/catch構文とは?例外処理の基本をやさしく解説!

C++のRAIIとは?リソース管理を自動化する重要な設計原則

C++の静的変数(static variable)とは?使い方・特徴・注意点をやさしく解説!

C++の関数ポインタ(Function Pointer)とは?使い方と活用例をわかりやすく解説!

C++のラムダ式(Lambda Expression)とは?書き方・使い方をやさしく解説!

C++のスマートポインタ(Smart Pointer)とは?自動で安全なメモリ管理を実現しよう!

C++のコンパイル(Compile)とは?仕組みと流れをわかりやすく解説!

C++のリンク(Link)とは?コンパイルとの違いとエラー対策を解説!

C++のプリプロセッサディレクティブとは?#include や #define の意味と使い方