char greeting[]="Hello";
char* p=greeting;
const char* p=greeting; //non-const pointer,const data
char* const p=greeting; //const pointer,non-const data
const char* const p=greeting;//const pointer,const data
const语法虽然变化多端,但是并不高神莫测。const出现在星号左边,表示被指物是常量;如果出现在星号右边,表示被指物是指针;下面两种情况都是一样的,被指物是常亮:
void f1(const Widget* pw);
void f2(Widget const *pw);
STL迭代器是以指针为根据塑造出来的,所以迭代器的作用就像一个T*指针。声明迭代器为const就像声明指针为const一样,(即声明一个T*const指针),表示这个迭代器不得指向其他的东西,但它所值的东西的值是可以改变的。如果你希望迭代器所指的东西不可改变(即希望STL模拟一个const T*指针),你需要的是const_iterator;
下面是代码:
std::vector<int> vec;
...
const std::vector<int>::iterator iter=vec.begin();
*iter=10;
++iter; //error
std::vector<int>::const_iterator cIter=vec.begin();
*cIter=10; //error
++cIter;