c++ - 常量指针与指向常量的指针

这是两个初学者容易混淆的概念。比如,

T *pt = new T;

const T *pct  = pt;//指向常量(const T)的指针

T * const cpt = pt;//常量指针,指向T

 

不过使用一个引用比使用一个常量指针更简单:

const T &rct = *pt; //不用const T* const

T &rt = *pt; //不用T* const

 

使用过程中,要注意三点:

1. 一个指向常量的指针可以指向一个非常量对象

2. 指向非常量的指针不可以指向常量对象 (行为未定义)

 

 

 

3. 一个常见的误解是,适用于指针的转换同样适用于指向指针的指针。事实上并非如此。

例如,我们知道一个指向派生类的指针可被转换为一个指向其公共基类的指针:

 

Circle  * =   new  Circle;
Shape 
* =  c;  //  正确

      因为Circle 是一个( is-a ) Shape ,因而一个指向 Circle 的指针也是一个 Shape 指针。

然而,一个指向 Circle 指针的指针并不是一个指向 Shape 指针的指针:

 

 

Circle  ** cc  =   & c;
Shape 
** =  cc;  //  错误!

这里两种可以这样理解:

typedef Circle  * LPCircle;

typedef Shape  * LP Shape;

LPCircle * cc = & c;

LP Shape * s = cc;//错误, LP Shape和 LPCircle没有 is-a的关系

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值