关于基本内置类型:
- 基本内置类型:包括整型与浮点型,具体占用节字数由机器类型与编译器决定;
- 对于从一个内存地址开始的值,这个值占用的内存字节数目是由类型决定的,知道了类型后就能知道怎么解释该地址处的值了;
- 对于浮点数,c++primer并没有说明其规格化的内存存储表示,我记得关于浮点数的规格表示在《深入理解计算机系统》一书中说明的已经非常清楚了。
关于变量:
- 变量就是存储区的名字,变量有特定的类型,1)类型决定了内存大小与布局,2)类型决定了该变量可以参与的操作集。
- 对象:对象就是内存中具有类型的区域;
- 关于变量命名的注意:注意避免与关键字、标准库中的标识符重名了,此外标准库中变量名一般以两个连续的下划线开始,所以用户程序中注意。
- 变量初始化注意点:1)变量初始化:指创建变量并赋初值;2)赋值:指使用新值覆盖当前变量的值;C++中有复制初始化和直接初始化;例如:
int ival(1024);//direct-init
int ival = 1024;//copy-init
- 对于内置类型,复制初始化与直接初始化没有区别,对于类类型,通过称之为构造函数的成员函数对对象进行初始化。
- 变量没有初始化时的取值与编译器将变量放置的位置(变量定义的位置)有关,若为全局,则在data或bss段,那么os可能在初始进程创建过程中将bss清零;若定义在栈上,若没有赋予特定的值,则变量的取值只是内存中遗留的随机值了。
关于名字作用域:
- 注意到是,局部符号会覆盖全局同名符号;
- 在变量定义出定义变量,这是推荐的方式,但对有些编译器、尤其是安全级别较高的例如windriver可能实现并非这样;
const:
- const用来定义不可更改的常量;与#define的区别,同时也是引入的原因可能在于const定义的变量编译器是需要做类型检查的。const变量默认为文件内部的局部变量,除非使用extern 修饰;
关于引用:
- 引用只是变量的别名;(与c的指针差别很大,我感觉并没有内含地址的意味);引用是基于另一个非引用类型的的类型,引用变量在定义时必须初始化;
- const引用:非const引用不能绑定到const对象上,因为如果可以,即通过非const引用可以修改const对象,这是不允许的;const引用可以绑定到非const对象上,因为const引用是只读而已。
关于枚举:
- 引入枚举只是将相关联的常量聚集成组,避免零散的使用#define或const常量。
- 由第一条,枚举成员必须是常量;
关于类类型:
- 设计一个类,先设计对外接口,即明确该类要干什么,提供什么服务;
关于头文件:
- 头文件可以包含头文件,这是因为当前头文件中定义的某些类型可能在需要包含的头文件中定义了。
- 一些const对象定义在头文件中,每个包含该头文件的源文件都有了自己的const变量,其名称和值有一样。
- 若const变量不是用常量表达式初始化,那么就不应该定义在头文件中。相反应在一个源文件中定义,在头文件中使用extern修饰,从而让其他文件共享。