1. ホーム
  2. c++

[解決済み] クラス内のconstメンバ変数を初期化するには?

2022-07-02 01:28:56

質問

#include <iostream>

using namespace std;
class T1
{
  const int t = 100;
  public:

  T1()
  {

    cout << "T1 constructor: " << t << endl;
  }
};

constメンバ変数を初期化しようとすると t を100で初期化しようとしています。しかし、それは私に次のエラーを与えています。

test.cpp:21: error: ISO C++ forbids initialization of member ‘t’
test.cpp:21: error: making ‘t’ static

を初期化するにはどうすればよいのでしょうか? const の値を初期化することができますか?

どのように解決するのですか?

この const 変数は、変数が変更可能かどうかを指定します。割り当てられた定数は、その変数が参照されるたびに使用されます。割り当てられた値は、プログラムの実行中に変更することはできません。

Bjarne Stroustrupの 説明 が簡潔にまとめています。

クラスは通常ヘッダーファイルで宣言され、ヘッダーファイルは通常多くの翻訳ユニットに含まれます。しかし、複雑なリンカー ルールを避けるために、C++ はすべてのオブジェクトが一意の定義を持つことを要求しています。C++ がオブジェクトとしてメモリに格納する必要のあるエンティティのクラス内定義を許可した場合、そのルールは破られることになります。

A const 変数はクラス内で宣言されなければなりませんが、その中で定義することはできません。クラスの外でconst変数を定義する必要があります。

T1() : t( 100 ){}

ここでは、割り当てられた t = 100 の代入は、クラスの初期化が行われるよりずっと前に、イニシャライザー・リストの中で行われます。