【C++Primer读书笔记】2.4 const限定符

默认情况下,const限定符仅在文件内有效

不同文件定义同名的const类型变量,默认为不同的定义。
如果希望不同文件共享同一个const变量,则这个const变量在声明和定义时都要加extern。

//file_1.cc定义并初始化了一个常量,该常量可以被其他文件访问
extern const int bufSize=fcn();
//file_1.h头文件
extern const int bufSize;//与file_1.cc定义的bufSize是同一个

const的引用

double dval=3.14;
double &k=dval;
const double &ri=dval;
k=0;
cout<<ri;	//输出0

double dval=3.14;
double &k=dval;
const int &ri=dval;
k=0;
cout<<ri;	//输出3

/*第二组ri绑定了一个临时量
**const int temp=dval;
**const int &ri=temp;	*/

对const的引用可能引用一个非const的对象

int i=42;
int &r1=i;
const int &r2=i;
r1=0;
r2=0;	//错误

指针与const

常量的地址需要通过指向常量的指针储存

const int i=42;
const int *p=i;

也允许指向常量的指针指向非常量,但不允许通过指针修改对象的值

int i=42;
const int *p=i;

const指针:不变的是指针所指向的值而非指向对象的值

int errNum=0;
int *const curErr = &errNum;	//curErr将一直指向errNum
//但是可以通过curErr改变errNum的值,如 *curErr=3;
const double p=3.14;
const double *const pip=&p;		//pip是指向常量的常量指针
//pip所指对象的值和其所存地址的值都不能改变

顶层const

顶层const
狭义:指针本身是个常量
广义:表示任意的对象是常量
底层const
狭义:指针所指向的对象是常量
广义:与指针和引用等复合类型的基本类型部分有关

//例子
int i=0;
int *const pi=&i;	//不能改变pi的值,顶层const
const int ci=42;	//不能改变ci的值,顶层const
const int *p2=&ci;	//允许改变p2的值,底层const
const int *const p3=p2;	//靠右的顶层const,靠左的底层const
const int &r=ci;	//用于声明引用的都是底层const

执行对象拷贝操作,顶层const不受影响;拷入拷出对象必须具有相同的底层const资格,或者两个对象的数据类型可以发生转换。一般来说非常量可以转化为常量,反之不行。

i=ci;
p2=p3;	
//ci顶层const与p3顶层const无影响

int *p=p3;	//	错误:p3包含底层const的定义,而p没有
p2=&i;		//正确:int* 能转化成 const int*
p2=p3;		//正确:p2与p3都是底层const
int &r=ci;	//错误:普通的int&不能绑定到int常量上
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值