放分,大家看看我的解答对不对!
在《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 的效果差不多,不是么?
本人愚笨,上面要是又错误,大虾们多多指教。