c++ primer第五版(中文)习题答案 第二章第四节-const限定符

来源:互联网 发布:长歌门捏脸数据 编辑:程序博客网 时间:2024/04/30 18:35

本博客知识记录自己学习中的笔记或者记录,如果有错误欢迎大家纠正。
转载声明出处

默认状态下,const对象仅在文件内有效 ,在其他文件中使用 必须在变量前面加extern才能访问。

const 的引用 :可以把引用绑定到const对象上,就像绑定到其他对象上一样 我们称之为对常量的引用 ,对常量的引用不能被其他用作修改它所绑定的对象,普通引用不能引用常量对象,常量引用 可以引用普通和常量对象。

指针const:
指向常量的指针,不能用于改变其所指对象的值,要想存放常量对象的地址,只能使用指向常量的指针。 (const 在*的左边)

const指针: 指针本身地址不能被改变,(const 在* 的右边)

练习 2.26 下面那些句子是合法的,如果有不合法的句子,请说明为什么
a . const int buf;//不合法 没有初始化const
b. int cnt =0;
c const int sz = cnt;
d ++cnt;++sz; //错误 sz是const 不能对其值进行修改

练习 2.27 下面的那些初始化是合法的,请说明原因

a. int i = -1,&r =0; //错误 引用是对象b. int *const p2 =&i2; //正确c. const int i = -1,&r =0;//正确 r是常引用 0是常量d. const int *const p3 = &i2; // 正确e. const int *p1 =&i2; //正确f. const int &const r2;//错误 引用不能const g. const int i2 = i;&r=i;//正确

练习 2.28 说明下面的这些定义是什么意思,挑出其中不合法的。

a. int i,*const cp;//错误 没有初始化 const指针cpb. int *p1,*const p2; //错误 没有初始化 const指针p2c. const int ic,&r =ic;//错误 ic没有初始化d. const int * const p3;//错误 const指针p3没有初始化e. const int *p; //正确 指针本身是常量 ,不是指向常量 可以不初始化

练习 2.29 假设已有上一个练习中定义的那些变量则下面的那些语句是合法的?请说明原因。

a. i =ic;  //正确b. p1 =p3; //p3是一个常指针c. p1 =⁣ //错误,常量 使用常量指针d. p3 =⁣ //错误 ,p3本身也是conste. p2 = p1; //错误 p2是常指针不能改变指向的地址 f. ic =*p3; //错误 ic是const 不能修改其值

练习2.30 对于下面的这些语句,请说明对象被声明成了顶层const还是底层const.

a. const int v2 =0;  //顶层b. int v1 = v2;      c. int *p1=&v1,&r1=v1; d. const int *p2 =&v2,*const p3 =&i,&r2 =v2; //p2 底层,p3左边的底层 右边是顶层,r2是底层

练习 2.31 假设已有上一个练习中所做的那些声明,则下面的那些语句是合法的,请说明顶层const和底层const在每个例子中有何体现。
r1 =v2; //正确
p1=p2; //错误 p2是底层const ,p1不是
p2=p1;//正确
p1=p3;//错误 p3是底层const ,p1不是
p2=p3;//正确
练习 2.32 下面代码是否合法,如果非法,请假设将其修改正确
int null = 0 ,*p =null;
不合法,修改
int null = 0 ,*p =&null; //p指向变量null
int null = 0 ,*p =nullptr;//p为空指针 nullptr

0 0