私はそれを次のように使用すると理解しています:
int getX() const {...}
この関数は、本体で使用される変数を変更しないことを意味します。しかし、私が理解していなかったのは、次のように const を 2 か所で使用していることです。
const int* getX () const {...}
const
の前にキーワードを置くことの使用は何int*
ですか?
あなたの最初の解釈は間違っています。
int getX() const { ... }
はメンバー関数であり、データ メンバーを変更したり、その関数を持つクラスの特定のインスタンスに対して非 const を呼び出したりすることはできません。
const int* getX() const { ... }
を返すためconst int*
、それを使用して割り当てることができるものを制限します。これはconst int への非 const ポインターであるため、それが指す int を変更することはできませんが、ポインター自体は変更できます。例えば:
const int* i = someInstange.getX(); // getX() returns const int*
i = someOtherFunction(); // another function returning const int*. OK to reassign i.
したがって、i
それ自体は ではありませんconst
が、それが指すのは次のとおりです。
(*i)++; // ERROR!
const ポインターを const intに返したい場合は、次のようなものが必要になります。
const int * const getX() {}
const
意味を変えずに最初のものを別の場所に置くことができるので、問題全体はさらに複雑になります。詳細については、この SO questionを参照してください。