const修飾子をメンバ関数につけた際のコンパイラの挙動について
const修飾子をメンバ関数につけた際のコンパイラの挙動について質問させてください。
class Test{
public:
int* i;
Test(){
i = new int[3];
}
~Test(){
delete[] i;
}
void change() const {
i[0] += 1;
}
};
int main(){
Test test;
test.change();
return 0;
}
上記のソースコードで、change()
の中でメンバ変数i
の変更を行っているため、コンパイルが通らないことを期待したのですが、問題なくコンパイルされてしまいました。
配列としてint i[3];
と宣言するように変更すれば、const修飾子のせいでコンパイルが通らないことは分かったのですが、上記のコードでconst修飾子があるにも関わらずコンパイルが通ってしまう理由を教えていただけると有り難いです。