您的位置:首页 > 编程语言 > C语言/C++

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

2011-04-20 00:17 246 查看
这是两个初学者容易混淆的概念。比如,

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
*
c
=

new
Circle;



Shape
*
s
=
c;
//
正确

因为Circle
是一个(
is-a

Shape
,因而一个指向
Circle
的指针也是一个
Shape
指针。

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



Circle
**
cc
=

&
c;



Shape
**
s
=
cc;
//
错误!

这里两种可以这样理解:

typedef
Circle
* LPCircle;

typedef
Shape
* LP
Shape;

LPCircle * cc = & c;

LP
Shape * s = cc;//错误,
LP
Shape和
LPCircle没有 is-a的关系
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: