1.
const int a=10; ①
int &b=a; ②//error
解释1:因为由①中a的值不能改变,但②中可通过b改变a的值。
解释2:②中为int=const int,从右向左功能扩大,所以不对。
改为:
const int a=10;
const int &b=a;
2.
const int a=10; ①
int & c=(int &)a;②//right
注:(int &)这个强转意味着什么?
让c指向a,并且c可以修改a的值,这样做有很大的安全风险。
注:C++将常变量当做常量来看待,在编译时就已经将常变量替代了。
这就产生了一个问题,如何判断程序按照哪种方式来编译的?
3.
int a=10,b=20;//①
int * p=&a;//②
int * s=p;//③
int *& rs=p;//④
③中的s与④中的rs是不同的,p指向的改变不会影响s,但会影响rs。
4.
int a=10,b=20;//①
int * s=&a;//②
int *& p1=s;//③p1是s的别名,如果p1的指向发生改变,s也发生改变。
const int *& p2=s;//④ const修饰的是指向能力,也就是说,*p2=100;是错误的。
//但注意,此时如果我们让P2指向b,s也要指向b。
int *const & p1=s;//⑤ const修饰的是&p1,也就是说,p2=&b;是错误的。
const int * const & p1=s;//⑥