C++——const理解を深めるconstは関数の後
まず次の4つのケースを見て、constを理解する基礎であるべきで、私は掌握しなければならなくてしかも掌握しやすいと思います
constがアスタリスクの左側にある場合、constはポインタが指す変数を修飾するために使用され、すなわちポインタが定数を指す.constがアスタリスクの右側にある場合、constは修飾ポインタ自体、すなわちポインタ自体が定数です.したがって、[1]と[2]の場合と同様に、ポインタが指すコンテンツが定数である場合、*a=3ができない場合、コンテンツの変更操作は許されない.[3]ポインタ自体が定数であり、ポインタが指す内容が定数ではない場合、a++などのポインタ自体を変更することはできない.[4]は、ポインタ自体と指向する内容の両方が定数である.
もしconstが関数の後ろについていたら、次のプログラムを見てみましょう.
constがCompare(const CBox&xBox)の後ろに付いているのは、関数の中でここで変えるべきではない量(つまりVolume)をうっかり変えないようにするためです.このような関数を常メンバー関数と呼ぶ.常メンバー関数は、データ・メンバーの値を変更することも、データ・メンバーの値の変化を引き起こすメンバー関数を呼び出すこともできず、constメンバー関数のみを呼び出すこともできない「読み取り専用」関数と理解できます.したがって、ここでのVolume()関数も常メンバー関数である必要があります.
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()関数も常メンバー関数である必要があります.