C++のクラスのメンバ関数に入れるconst修飾子の効果について、(自分が)よく混乱するのでまとめてみた。
- const int *func() { }
関数func()の返却したポインタの指す場所が変更できないという意味。
- int const *func() { }
関数func()の返却したポインタの指す場所が変更できないという意味。(上と同じ)
- int * const func() { }
関数func()の返却したポインタの値が変更できないという意味。ポインタの指す先は変更できる。
- int * func() const { }
関数func()の内部でクラスのデータメンバを変更できないという意味。返却したポインタ、ポインタの指す先は変更できる。
たとえば次はコンパイルエラーとなる。
class S {
int x;
int* func() const { return &x; }
};
関数func()の返却したポインタにより、その指す先が変更できてしまう。つまり、この関数はいわゆるconst外しを行う関数である。intの前にもconst修飾子を付けなければならない。
class S {
int x;
const int* func() const { return &x; }
};
コメント