我要加入 登录
声振论坛 返回首页

风花雪月的个人空间 http://home.vibunion.com/?18 [收藏] [复制] [分享] [RSS]

日志

const指针和引用

已有 1205 次阅读2007-12-11 15:28 |个人分类:C/C++

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上会给出个警告,因为在语义上是重复的。


引用地址:http://blog.programfan.com/trackback.asp?id=30197

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 我要加入

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-5-6 21:48 , Processed in 0.081396 second(s), 16 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

返回顶部