C++——const理解を深めるconstは関数の後


まず次の4つのケースを見て、constを理解する基礎であるべきで、私は掌握しなければならなくてしかも掌握しやすいと思います
  int   b   =   500;   
  const   int*   a   =   &b;              [1]   
  int   const   *a   =   &b;              [2]   
  int*   const   a   =   &b;              [3]   
  const   int*   const   a   =   &b;      [4]    

constがアスタリスクの左側にある場合、constはポインタが指す変数を修飾するために使用され、すなわちポインタが定数を指す.constがアスタリスクの右側にある場合、constは修飾ポインタ自体、すなわちポインタ自体が定数です.したがって、[1]と[2]の場合と同様に、ポインタが指すコンテンツが定数である場合、*a=3ができない場合、コンテンツの変更操作は許されない.[3]ポインタ自体が定数であり、ポインタが指す内容が定数ではない場合、a++などのポインタ自体を変更することはできない.[4]は、ポインタ自体と指向する内容の両方が定数である.
もしconstが関数の後ろについていたら、次のプログラムを見てみましょう.
double Volume() const{
    return m_Length*m_Width*m_Height;
}
bool Compare(const CBox &xBox) const{
    return this->Volume() > xBox.Volume();
}

constがCompare(const CBox&xBox)の後ろに付いているのは、関数の中でここで変えるべきではない量(つまりVolume)をうっかり変えないようにするためです.このような関数を常メンバー関数と呼ぶ.常メンバー関数は、データ・メンバーの値を変更することも、データ・メンバーの値の変化を引き起こすメンバー関数を呼び出すこともできず、constメンバー関数のみを呼び出すこともできない「読み取り専用」関数と理解できます.したがって、ここでのVolume()関数も常メンバー関数である必要があります.