C++限定符const

主要记录一下指针、引用和const运算符的特点。

1、引用和const:引用并不是一个对象,所以使用const修饰引用只有一种情况,如下列语句;

int i =13;
const int  &r1 = i;
const int  &r2 = 13;
const int &r3 = r1*2;

C++允许常量引用绑定一个变量,如上述代码表示:r1是一个常量引用,r1与变量i绑定,我们可以通过变量名i改变其值,但不可以通过r1改变i的值,也就是说r1这个别名是只读的。

cout<<i<<r1<<endl;
i = 15;
cout<<i<<r1<<endl;

如上述语句,第一行输出为 13 13,第三行输出为15,15。但是如果有r1=15;这样一条语句的话,编译器会报错。也就是说,常量引用与一个常量绑定仅仅是这个引用自己的一厢情愿,

引用无法去改变被绑定对象的值,但是其他途径改变对象值的时候,引用也不会限制。

2、引用和指针:由于指针是一个对象,所以const有多种情况。即:指针本身是常量、指向的数据是常量、两者都为常量,如下列代码;

int num =13;
int *const ptr1 = &num;
const int *ptr2 =&num;
const int *const ptr3 = &num;

对于这类语句,可以采取从右向左看的方式。例如第二条语句,const修饰ptr1,表示ptr1是一个常量,继续向右,*运算符说明ptr1是一个常量指针,再向右,int指明ptr1指向一个int类型的量。

注意在这里ptr1是常量,即指针的内容是不可变的,但指针指向的内容是可变的。即:*ptr1 = 15是合法的,但*ptr1=nullptr是不合法的。

对于第三条语句,指针认为自己指向的量是常量,所以*ptr2=15;是不合法的;但是指针不是常量,即ptr2=nullptr是合法的。注意,不能通过*ptr2修改num的值,但仍可以通过num=15;这种方式来赋值。

对于第四条语句,*ptr3=15和ptr=nullptr都是不合法的。

posted @ 2020-05-06 22:20  你的泪光  阅读(124)  评论(0)    收藏  举报