最初に、変数を編集しないことをコンパイラーに約束しましたが、クラスの他のユーザーには約束しませんでした。
2 番目の例では、変数を編集しないことをクラスの他のユーザーに約束しましたが、その約束を守れませんでした。
また、明確な違いがあることにも注意してください。
bar* const variable
と
const bar* variable
と
const bar* const variable
最初の形式では、ポインターは変更されませんが、指しているオブジェクトを編集できます。2 番目の形式では、ポインターを編集 (別のオブジェクトをポイント) できますが、ポインターが指す変数を編集することはできません。最終的なフォームでは、ポインターもポインターが指すオブジェクトも編集しません。参照
述べられた質問にもう少し明確にするために、いつでも少ないよりも多くの const を約束することができます。与えられたクラス:
class Foo {
void func1 (int x);
void func2 (int *x);
}
次の実装をコンパイルできます。
Foo::func1(const int x) {}
Foo::func2(const int *x) {}
また:
Foo::func1(const int x) {}
Foo::func2(const int* const x) {}
問題なく。変数を編集できる可能性があることをユーザーに伝えました。あなたの実装では、この特定の実装ではこれらの変数を編集しないことをコンパイラに伝えました。ユーザーへの約束を破っていないので、コードはコンパイルされます。