第二章 2.3

来源:互联网 发布:源码上传工具 编辑:程序博客网 时间:2024/05/22 05:05

2.3  复合类型

1、更通用的描述(声明语句):一条声明语句由一个基本数据类型(base type)和紧随其后的一个声明符(declarator)列表组成。每个声明符命名了一个变量并指定该变量为与基本数据类型有关的某种类型。

2、引用即别名:引用并非对象,它只是为一个已经存在的对象所起的另一个名字。一般在初始化变量时,初始值会被拷贝到新建的对象中。然而定义引用时,程序把引用和它的初始值绑定(bind)在一起,而不是将初始值拷贝给引用。

3、一旦引用初始化完成,引用将和它的初始值对象一直绑定在一起,对引用进行的所有操作都是在与之绑定的对象上进行的。因为无法令引用重新绑定另一个对象,所以引用必须初始化。

4、绝大部分情况下,引用的类型要和与之绑定的对象严格匹配,而且,引用只能绑定在对象上,而不能与字面值或者某个表达式的计算结果绑定在一起。

5、因为引用不是对象,所以不能定义引用的引用,也不能定义指向引用的指针。

6、绝大部分情况下,指针的类型要和它所指向的对象严格匹配。

7、指针的四种状态:指向一个对象、指向紧邻对象所占空间的下一个位置、空指针、无效指针。访问无效指针的后果无法预计。并且,虽然第二种和第三种指针是有效的,但实际上它们也没有指向任何对象,所以试图访问它们(假定的)指向的对象也是不被允许的,这样做的后果也是无法预计的。

8、空指针可以用nullptr初始化,或直接用字面值0,另外注意指针不可以用int型变量初始化,即使int变量的值恰好等于0也不行。

9、P49:建议:初始化所有指针。

10、有时候要想搞清楚一条赋值语句到底是改变了指针的值还是指针所指对象的值不太容易,最好的办法是赋值永远改变的是等号左侧的对象。

11、使用指针进行操作必须确保指针是有效的。

12、void*指针可用于存放任何类型对象的地址。也正因为此,它能做的事情比较有限,不能直接操作它所指向的对象,因为我们并不知道对象的类型。

13、最好将类型修饰符(*或&)和变量标识符写在一起,将它和类型名写在一起也是可以的,但那样做只有第一个变量会被修饰,如果想同时修饰多个变量则需要写多条语句,这点需要注意。

14、面对一条比较复杂的指针或者引用的声明语句时,从右向左阅读有助于弄清楚它的真实含义:离变量名最近的符号对变量的类型有最直接的影响。

0 0