1.const
int a=10,b=20;
const int* p1=&a;
int * const p2=&a;
const int * const p3=a&;
首先我们来看着三行代码
const int *p1=&a;
在这里const修饰的是*p1,没有锁定p1的指向能力,所以我们可以让p指向其他地址,但不能通过解引用来修改a的值。
而int * const p2=&a;
我们可以看到,这里const修饰的是p2的指向能力,所以可以通过解引用来修改值,但是不能让p2重新指向其他地址。
const int * const p3=&a;
这里const同时修饰了p3的指向能力和该值能力,所以不能改变它的指向,也不能通过解引用来修改它指向的值
2,引用&
int a=10;
int &b=a;
这里的int &b=a等价于 int * const p=&a;
只能通过引用来修改值,但不能 int &b=c;这个是不对的,可以理解为深度绑定。
引用不存在引用的引用:
在这里我们就可以看到,b现在已经成为a的别名,不论是修改a还是b,都可以改变a的值。
右值引用:可以对常数进行引用(左值是可以取地址,右值不可以取地址)