面对指针,你可以指出指针自身、指针所指物,或者两者都(或都不)是const.
char greeting[]="Hello";
char *p =greeting; //non-const pointer,non-const data
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出现在星号左边,表示被指物是常量,如果出现在星号右边,表示指针自身是常量,如果出现在星号两边,表示被指物和指针两者都是常量。
如果被指物是常量,则将关键字const写在类型之前,有把写在类型之前,星号之前。
void f1(const Widget* pw);
void f2(Widget const *pw);
STL迭代器以指针为根据塑模出来,所以迭代器的作用像个T*指针。声明迭代器为const就像申明指针为const一样(即申明一个T* const 指针),表明这个迭代器不得不指向不同的东西,但所指的东西的值是可以改动的。
std::vector<int> vec;
const std::vector<int>::iterator iter=vec.begin(); //iter的作用像个T* const;
*iter=10; //没问题,改变iter所指物
++iter; //错误,iter是const
std::vector<int>::const_iterator cIter=vec.begin(); //cIter的作用像个const T*
*cIter=10; //错误,*cIter是const
++iter; // 没问题,改变cIter.
char greeting[]="Hello";
char *p =greeting; //non-const pointer,non-const data
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出现在星号左边,表示被指物是常量,如果出现在星号右边,表示指针自身是常量,如果出现在星号两边,表示被指物和指针两者都是常量。
如果被指物是常量,则将关键字const写在类型之前,有把写在类型之前,星号之前。
void f1(const Widget* pw);
void f2(Widget const *pw);
STL迭代器以指针为根据塑模出来,所以迭代器的作用像个T*指针。声明迭代器为const就像申明指针为const一样(即申明一个T* const 指针),表明这个迭代器不得不指向不同的东西,但所指的东西的值是可以改动的。
std::vector<int> vec;
const std::vector<int>::iterator iter=vec.begin(); //iter的作用像个T* const;
*iter=10; //没问题,改变iter所指物
++iter; //错误,iter是const
std::vector<int>::const_iterator cIter=vec.begin(); //cIter的作用像个const T*
*cIter=10; //错误,*cIter是const
++iter; // 没问题,改变cIter.