不動ポインタ(何)

定数を宣言する場合はconstを使う。

const int c = 299792458;

ではポインタの場合はどうか?

const int* p = &c;

これ、一見よいように見えますが、実は中身が定数なのであってポインタ自体は動けたりします。

p++;
//↑何の問題もない。

じゃあポインタ自体を固定したい場合はどうなのか?文法書見てみたら以下のようにすればいいみたいです。

int* const p = &c;

これでポインタは固定されます。ただし、今度は中身が動きます。両方固定したい場合は以下のように組み合わせます。

const int* const p = &c;

んで、ポインタといえばイテレータ(違)。こいつらも同じように出来るんでしょうか?試してみたところ、ほぼ出来ました。

vector< int > aData;

vector< int >::iterator p;
//↑普通のイテレータ
vector< int >::const_iterator p = aData.begin();
//↑中身が固定のイテレータ
vector< int >::iterator const p = aData.end();
//↑イテレータ自体が固定
vector< int >::const_iterator const p = aData.end();
//↑両方固定。

中身固定の場合はちゃんとそれ用のイテレータが存在しました。で、イテレータ自体を固定したい場合はポインタと同じようにconstを差し込めばよいようです。