码迷,mamicode.com
首页 > 其他好文 > 详细

常量指针和指向常量的指针

时间:2015-02-15 15:11:25      阅读:113      评论:0      收藏:0      [点我收藏+]

标签:指针   pointer   const   

经常C++程序员会提到“常量指针( const pointer )”, 其实他们想表达的意思往往是“指向常量的指针(pointer to const)”。 真不幸, 这是两个完全不同的概念。

T* pt = new T; 
const T* pct = pt; //一个指向常量的指针
T* const cpt = pt; //一个常量指针

这里一定要弄清楚const 修饰符修饰的对象是 基础类型还是指针修饰符*.

C++ 中对于指针修饰符*左侧内容具有顺序无关的语法特性更是加剧了这种混淆:

const T  *p1;
T const  *p2;

以上两种方式声明指向常量的指针具有相同的效果。
出于习惯和对传统的尊重,一般我们常使用第一种方式,但是许多C++专家推荐第二种形式。 理由是第二种形式不容易被误解。 因为这种声明可以倒过来读,即const 修饰的是基础类型T ,也即指向常量T的指针。

好了现在我们根据顺序无关性的语法特性,整理一下最初的代码:

T* pt = new T;
T const* pct =pt;
T* const cpt = pt;

这个时候只要看看const 前面是T 还是 * 就知道const 修饰的对象了。

  • 接下来让我们看一看指向常量的常量指针:
const T* const cpct = pt;

大家看到第一个const 显然修饰 T, 第二个const 修饰的对象是*, 这样cpct 既是一个指向常量的指针又是一个指针常量。

  • 常量指针和引用的关系

既然我们都知道, 常量指针指向哪里不可以改变, 这一点和引用的三大特性之一:引用所指向的对象不可以改变, 是一致的。 由此我们可以解开一个迷惑,那就是为什么C++ 代码中很少使用常量指针,而经常使用指向常量的指针。原因就是使用引用比使用一个常量指针更简单更直观。

使用引用比使用一个常量指针更简单更直观,应该尽量避免使用常量指针,而应该使用引用替代。

好了最后让我们看一看如何用引用取代指向常量的常量指针

const T* const cpct = pt;
const T& rct = *pt;

常量指针和指向常量的指针

标签:指针   pointer   const   

原文地址:http://blog.csdn.net/techx/article/details/43834837

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!