不動ポインタ(何)
定数を宣言する場合は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を差し込めばよいようです。