放分,大家看看我的解答对不对!

peter9606 peter9606 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
在《C++Primer》中的第88页,有这样的例子。
const int ival = 1024;
const int* const &pi_ref = &ival; //这里的两个const到底哪个修饰指针,哪个修饰引用呢?以后遇到多个修饰符连在一起写的时候,怎样判断呢?谢谢!
-------------------------------------------------------------------------

楼主明白const int ival = 1024;的道理,那么下面的也不难。
首先const int * p = &ival ;表示不能进行下面的操作:*p = 10000 ; 也就是不能通过指针的解引用操作,改变被指向的变量的值,但是我们可以p= &ival2,去让它指向另外别的东西?答案是不可以,因为引用一旦被绑定,那么就不可以再更改,这里p显然已经和ival的地址绑定了。如果是这样的我们就可以改变p:
int x =100 ;
const int * px = &x ;
const int * &ppx = px ;
const int * px2 ;
然后我们 ppx = px2 ;
这样做显然是可以的。


int* &p = &ival ;表示p是一个指针类型的引用,既然是引用就可以把它当作被引用的对象一样使用,也就是说你可以*p = 1000; 或者 *(p++) (虽然这样做没有意义,但是我们是做个举例)。

const int* &p = &ival ; 表示p是一个const int *类型的引用,我们一样不可以通过*p去改变ival的值。但是这样做确实可以的:
void main(){
int x =100 ;
int x2 = 1000 ;
const int * px = &x ;
const int * &ppx = px ;
const int * px2 = &x2 ;
ppx = px2 ;

}

下面 说说const int* & const p = &ival ;吧
这里显然不但p绑定到了一个const int *类型上,而且p本身也是一个常量,也就是说p本身也不可以被改变:
void main(){
int x =100 ;
int x2 = 1000 ;
const int * px = &x ;
const int * const &ppx = px ;
const int * px2 = &x2 ;
ppx = px2 ; //------à这里显然就有错误了。

}

事实上const int * const & 与const int * const 的效果差不多,不是么?

本人愚笨,上面要是又错误,大虾们多多指教。

...全文
评论 11
收藏 已收藏
分享
返回顶部
peter9606
C++ 语言 65,214 成员 250,514 内容