2

私はそれを次のように使用すると理解しています:

int getX() const {...} 

この関数は、本体で使用される変数を変更しないことを意味します。しかし、私が理解していなかったのは、次のように const を 2 か所で使用していることです。

const int* getX () const {...}

constの前にキーワードを置くことの使用は何int*ですか?

4

1 に答える 1

5

あなたの最初の解釈は間違っています。

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を参照してください。

于 2012-04-22T07:37:53.813 に答える