キーワードconst(3)--mutableキーワード

1327 ワード

メンバー関数の後にconstを付けると、クラスのデータ・メンバーは変更できません.たとえば、次のようになります.
class A{
private:
 int aa;
public:
 int x(){
 return aa++;
} //   
 int x() const{
 return aa++;
} //   
};

もちろん、mutableキーワードで修飾されたメンバー変数がconst関数として宣言されることで変更できる場合があります.mutableについて:
キーワードmutableは、クラスの非静的および非常に多くのデータメンバーにのみ使用できるC++の一般的でないキーワードです.1つのオブジェクトの状態は、そのオブジェクトの非静的データメンバーによって決定されることを知っています.したがって、データメンバーが変化するにつれて、オブジェクトの状態も変化します.クラスのメンバー関数がconstタイプとして宣言された場合、その関数はオブジェクトの状態を変更しないことを示します.つまり、クラスの非静的データメンバーは変更されません.しかし、クラス関数にクラスのデータメンバーを割り当てる必要がある場合があります.mutableキーワードを使用する必要があります.
例:
  class Demo{
  public:
      Demo(){}
      ~Demo(){}
  public:
      bool getFlag() const{
      m_nAccess++;
      return m_bFlag;
      }
  private:
      int m_nAccess;
      bool m_bFlag;
  }; 

  int main(){
  return 0;
  }

上記のコードをコンパイルするとerror C 2166:l-value specifies const objectのエラーが発生し、constタイプの関数でクラスの非静的データメンバーが変更されたことを示します.
この場合、constメンバー関数で変更する非静的データメンバーm_をmutableで修飾する必要があります.nAccess、コードは以下の通りです.
 class Demo{
  public:
      Demo(){}
      ~Demo(){}
  public:
      bool getFlag() const{
          m_nAccess++;
          return m_bFlag;
  }
  private:
      mutable int m_nAccess;
      bool m_bFlag;
  }; 

  int main(){
  return 0;
  }

これで再コンパイル時にエラーは発生しません.