C++のstaticキーワードとは?静的変数・静的関数の使い方を実例で解説
C++におけるstaticキーワードは、変数・データメンバ・関数に対して使用でき、これらがプログラムの生存期間全体にわたってメモリ上に確保されることを意味します。staticが付いた変数やデータメンバは、一度変更・初期化された後もプログラムが終了するまでその状態が保持されます。また、静的メンバ関数はオブジェクトを生成しなくても、クラス名を使って直接呼び出すことができるのが大きな特徴です。
static変数の主な特徴
- 初期化は1回だけ:static変数はプログラム実行中に一度だけ初期化され、以降は値が保持され続けます。
- 寿命が長い:コンパイラはプログラム終了まで変数をメモリ上に保持します。
- 定義場所は柔軟:関数の中でも外でも定義できますが、可視性(スコープ)は定義されたブロック内に限定されます。
- デフォルト値はゼロ:明示的に初期化しない場合、static変数は自動的に0で初期化されます。
staticキーワードの基本構文
static データ型 変数名 = 値; // 静的変数
static 戻り値の型 関数名() { // 静的関数
...
}
構成要素の説明
- データ型(datatype):int、char、floatなど、変数のデータ型を指定します。
- 変数名(variable_name):プログラマが任意に決定する変数の名前です。
- 値(value):変数を初期化するための値です。省略した場合は0が設定されます。
- 戻り値の型(return_type):関数が返す値のデータ型です。
- 関数名(function_name):プログラマが任意に決定する関数の名前です。
staticキーワードの使用例
次に、static変数とstaticメンバ関数を実際に使ったサンプルコードを見てみましょう。
#include <bits/stdc++.h>
using namespace std;
class Base {
public : static int val;
static int func(int a) {
cout << "\nStatic member function is called";
cout << "\nThe value of a : " << a;
}
};
int Base::val=28;
int main() {
Base b;
Base::func(8);
cout << "\nThe static variable value : " << b.val;
return 0;
}
実行結果
Static member function is called
The value of a : 8
The static variable value : 28
コードの解説
上記のプログラムでは、まずstatic変数を宣言し、Baseクラス内にstaticメンバ関数を定義しています。
public : static int val;
static int func(int a) {
cout << "\nStatic member function called";
cout << "\nThe value of a : " << a;
}
続いて、クラス定義の後かつmain()関数より前の位置で、static変数を次のように初期化しています。クラスの静的メンバ変数は、クラス本体の外で定義・初期化する必要がある点に注意しましょう。
int Base::val=28;
main()関数内では、Baseクラスのオブジェクトを作成した上でstatic変数の値を表示しています。一方、static関数については、Base::func(8)のようにオブジェクトなしで、クラス名とスコープ解決演算子(::)を用いて直接呼び出している点がポイントです。これは静的メンバ関数が特定のオブジェクトに紐付かないためで、この性質によりユーティリティ的な処理をクラスにまとめる際によく活用されます。
Base b;
Base::func(8);
cout << "\nThe static variable value : " << b.val;
-
C++における#defineとconstキーワードの違いとは?
#defineとconstの基本的な違い#defineディレクティブはプリプロセッサディレクティブです。プリプロセッサは、コンパイラがソースコードを認識する前に、マクロをその定義内容で単純に置き換えます。イメージとしては、ソースコード全体に対して自動的に実行される「検索と置換」のようなものです。const変数の特徴一方、constによる変数宣言は、言語仕様上の実際の変数を宣言するものです。そのため、通常の変数と同じように扱うことができます。具体的には、以下のような操作が可能です。アドレスの取得(ポインタや参照への代入)関数への引数としての受け渡しキャストや型変換パフォーマンスとスコープの違いコ
-
C++のconstキーワードとは?定数宣言の基本とメリットを解説
C++におけるconstは、変数を「定数」として宣言するための型修飾子です。const付きで宣言された変数は、一度初期化するとその値を後から変更することができません。 constを使うメリット constを使用する最大の利点は、プログラム内で値が意図せず書き換えられるのを防げることです。例えば、円周率(PI)のような不変の値を扱う場合、プログラムのどの部分からもその値が変更されないようにしたいはずです。このような値はconstとして宣言しておくことで、誤った代入から守ることができます。 コンパイラの最適化との関係 const修飾された型を持つオブジェクトは、コンパイラによって読み取り専用メ