const限定符的用法

const限定符的用法

有时候我们希望定义这样一种变量,它的值不能被改变,为了满足这一要求,可以用关键字const来对变量来限定

const int bufSize = 512;

1.这样就把bufSize定义成一个常量,任何试图为bufSize赋值的行为都将引发错误,但与非const对象相比,const对象能完成非const对象的大部分操作,如一样能进行算术运算,也都能转化成一个布尔值,还可以为其他变量赋值;

int i = 42;
const int ci = i;
int j = ci;

2.const与引用
可以把引用绑定到const对象上,就像绑定到其他对象上一样,我们称之为常量的引用。与普通引用不同的是,我们不能通过该引用来改变对象的大小,如:

const int &r = 1//正确,可以认为&r为一个常量的引用
const int ci = 1024;
const int &r1 = ci;//正确,引用及其对象都是常量
r1 = 42;//错误:不能通过r1来改变ci的值
int &r2 = ci;//错误;试图让一个非常量引用指向一个常量对象

引用的类型必须与对象的类型一致,但是有两个例外,第一种就是在初始化常量引用时允许用任意表达式作为初始值,只要该表达式的结果能转化引用的类型即可,允许为一个常量引用绑定非常量的对象,字面值甚至表达式,但是非常量引用不能绑定常量对象;

double dval = 3.14;
const int&ri = dval;

此处ri引用了一个int型的数。对ri的操作应该是整型运算,但dval却是一个双精度的浮点数。因此为了确保ri绑定一个整数,编译器把上述代码变成了下面的形式:

const int temp =dval;
const int &ri = temp;

但是虽说时常量引用,但不一定要绑定常量,它也可以是变量,也就是说可以改变通过其他方式改变变量的大小(但不能通过该引用改变)

int i = 42;
int &r1 = i;//引用绑定对象
const int &r2 = i;//r2也绑定对象,但不允许通过r2改变i的值
r1 = 0;//r1并非常量,i的值修改成0;
r2 = 0;//错误,不能通过r2改变值

3.指针和const
(1)指向常量的指针:不能用于改变所指对象的值。要想存放常量对象的地址,只能用指向常量的指针。但是和常量引用一样,指向常量的指针也没有规定其所指的对象一定是常量,所谓指向常量的指针仅仅要求不能通过该指针改变对象的值,但没有规定通过其他方式改变对象的值。

const double pi = 3.14;
double *ptr = &pi//错误,存放常量对象只能是指向常量的指针;
const double *p = &pi//正确
*p = 42//不能通过指向常量的指针改变对象的大小 
double i = 3.25;
const double *cptr = i;//可以指向非常量
i = 4.12;//可以通过i本身改变值

(2)const 指针
指针是对象而引用不是,所以可以向对待其他对象一样,允许把指针本身定为常量,这样就意味着指针本身是一个常量。常量指针必须初始化,而且一旦初始化则它的值就无法改变,即不能再指向其他变量

int i = 0int *const p = &i;//p将一直指向i;
const double pi = 3.15159;
const double *const pip = πpip是一个指向常量的常量指针

常量指针本身是一个常量并不意味着不可以通过指针修改对象的值,如何指针指向的是一个非常量,则完全可以改变对象的值

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值