C++ constメンバ関数

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; }
};

コメント

コメントする

CAPTCHA