const出现在星号左边,表示被指物是常量; const出现在星号右边,表示指针本身是常量。
char name[] = "rongxinhua";
char name2[] = "tommer";
char *p1 = name; //非常量指针
const char *p2 = name; //指向常量的指针(不可改变指针所指的对象)
//char const *p2 = name; //同上
char *const p3 = name; //常量指针(不能重新指向其他对象)
const char *const p4 = name; //指向常量的常量指针
p1[0] = 'R'; //ok
p2[0] = 'R'; //error: assignment of read-only location ‘* p2’
p2 = name2; //ok
p3 = name2; //error: assignment of read-only variable ‘p3’
p3[2] = 'N'; //ok
迭代器的作用就像T*指针,声明迭代器为const对象就像声明指针为const一样(即声明一个T* const指针);(see code)
std::vector<int> vec;
const std::vector<int>::iterator iter = vec.begin();
*iter = 10; //ok
++iter; //error
而如果希望迭代器所指的东西不可被改变,则用const_iterator。(see code)
std::vector<int> vec;
std::vector<int>::const_iterator iter = vec.begin();
*iter = 10; //error
++iter; //ok