正文

const指针和引用2007-10-18 16:58:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/rickone/30197.html

分享到:

很久没写BLOG了,不知道还有没有人对这里有兴趣,呵~

const在面试的时候考得多,特地小结一下。

1,const是修饰符,它表示某个对象是常量,即不能修改,而C++没能彻底抛弃指针这个C留下的遗产而有些尴尬,指针是比较圆滑的家伙,它有双重身份,有时表示它自己,有时表示它所指的对象(所以C++建议我们尽量用引用而不是指针)

const double e;// error

const double pi=3.14;// ok,需要初始化

这样的用法没什么好说的。

2,指针带来的问题

像这样写:

int a,b;

const int *p=&a;

实际上没有定义一个常量指针,而是指向常量对象的指针,这意味着后面可以这样

p=&b;//ok

a,b不是常量而是变量,这是可以的,事实上编译器不管这个,而是管*p和p->这样的运算不能被修改

*p=1;//error

就是说上面那句定义的并不是一个常量,它相当于

int const *p;

实际上是个变量。

而真正的常量指针怎么写?这样

int * const p=&a;//ok

int *const p;// error

它的意思是p不能再改,只能赋值一次,这实际上是什么,是引用。引用和指针有着这样一个巨大的差异。

上面ok的代码,实际上可以写成

int &p=a;

也就是说根本不需要常量指针,因为有引用(?)

3,引用和const

引用有着针指的优点,但是它的身份是确定的,不像指针有双重身份,所以用const修饰没什么问题。

const int &p=a;

它的意思实际上和这样写差不多

int const * const p=&a;

本身一次赋值,所指对象也不能改。这就是喜欢考的那个所谓,一个指向一个常量对象的常量指针。

试一下这么写

int const & const p=&a;

多此一举,在VC上会给出个警告,因为在语义上是重复的。

阅读(8315) | 评论(2)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

loading...
您需要登录后才能评论,请 登录 或者 注册