Effective C++学习笔记(四)

面对指针,你可以指出指针自身、指针所指物,或者两者都(或都不)是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.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值