c++第八天

《c++ primer, 5E》第53页到第58页,笔记:

1、非常量引用一定不能绑定const对象。例 const int ci = 1024; const int &r1 = ci;

2、常量引用不一定要绑定const对象。例 int i = 42; const int &r1 = i;

常量引用类似于对象的持有者,限制对所持对象的操作。

3、区分 pointer to const 和 const pointer 声明方式的区别。(从右向左读)

4、其实上面的内容用 【顶层const】 和 【底层const】就很容易理解,

底层const针对指向常量的指针, 指针本身可以改变值,但必须指向常量。

必须具有相同的底层const资格才可以执行拷贝操作。

顶层const的值无法改变,但是可以作为字面值来使用。

 

遇到的问题:不理解【默认状态下, const对象仅在文件内有效】

 

课后练习:

 

练习 2.26

a不合法,const对象必须初始化 b合法

c合法,cnt的常量特征仅仅在执行改变ci的操作时才会发挥作用

d不合法


练习 2.27

只有a和f非法

(a)int i = -1, &r = 0;

非法, 非常量引用的初始值必须是一个对象

(b)int *const p2 = &i2;

合法。const pointer

(c)const int i = -1, &r = 0;

合法, 常量引用可以绑定字面值, 一般表达式

(d) 合法

(e) 合法

(f) 非法

(g) 合法

练习 2.28

从右向左读法

a. 不合法。 cp首先是一个常量, 未初始化

b. 不合法。 p2首先是一个常量, 必须初始化

c. 不合法。 ic未初始化

d. 不合法。 p3未初始化

e. 合法。 p是一个指向常量的指针,而非常量

练习 2.29

a. 合法

b. 不合法。p3 是一个指向常量的常量指针, p1是指向变量的指针, 如果合法,就会扩大常量的操作范围

c. 不合法。变量指针无法持有常量

d. 不合法。无法改变常量的值

e. 不合法。无法改变常量的值

f. 不合法。无法改变常量的值

练习 2.30

从左到右:

v2 顶层常量, v1 无层变量,p1 无层变量, r1 对v1的引用

p2 底层常量, p3 顶层常量, r2 既是顶层 const 也是底层 const

练习 2.31

mdzz 这题不做了, 总之就是, 具有相同底层资格才能赋值,

顶层const不能赋值,必须初始化。

posted @ 2017-02-01 11:25  xkfx  阅读(149)  评论(0编辑  收藏  举报