正文

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

阅读(8483) | 评论(2)


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

评论

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