1. ホーム
  2. c++

[解決済み] なぜ const 型メンバ関数は静的データメンバを変更できるのですか?

2023-05-29 05:18:56

質問

次のような C++ プログラムでは 静的データメンバ から const 関数は正常に動作しています。

class A 
{
  public:   
    static int a; // static data member

    void set() const
    {
        a = 10;
    }
};

しかし 非静的データメンバ から const 関数は動作しません。

class A 
{
  public:   
    int a; // non-static data member

    void set() const
    {
        a = 10;
    }
};

なぜ const メンバー関数が static データメンバを変更しますか?

どのように解決するには?

それがルールなのです、以上。そして、それには理由があるのです。

const の修飾子は、メンバ関数にある mutablestatic クラスのメンバ変数です。

合理的な説明として this のポインタは const 修飾されたメンバ関数は const 型であり this は本質的に インスタンス というクラスの static のメンバはクラスのインスタンスとは関係ありません。を変更するためにインスタンスは必要ありません。 static メンバを修正するためにインスタンスを必要としません。 A::a = 10; .

では、最初のケースで a = 10; の略記として A::a = 10; の省略記法と考え、2番目の場合は this->a = 10; の略記だと考えてください。 thisconst A* .