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 = # const int *ptr2 =# const int *const ptr3 = #
对于这类语句,可以采取从右向左看的方式。例如第二条语句,const修饰ptr1,表示ptr1是一个常量,继续向右,*运算符说明ptr1是一个常量指针,再向右,int指明ptr1指向一个int类型的量。
注意在这里ptr1是常量,即指针的内容是不可变的,但指针指向的内容是可变的。即:*ptr1 = 15是合法的,但*ptr1=nullptr是不合法的。
对于第三条语句,指针认为自己指向的量是常量,所以*ptr2=15;是不合法的;但是指针不是常量,即ptr2=nullptr是合法的。注意,不能通过*ptr2修改num的值,但仍可以通过num=15;这种方式来赋值。
对于第四条语句,*ptr3=15和ptr=nullptr都是不合法的。

浙公网安备 33010602011771号