c++ primer 第二章要点
2.1 基本内置类型
2.1.1 算数类型
- c++定义了包含算数类型和空类型的基本数据类型
- 算数类型包含:1.字符;2.整形数;3.布尔值;4.浮点数
- 空类型在函数不返回任何值时使用空类型作为返回类型
- 算数类型尺寸
- char的大小和一个机器字节一样,一个字节8比特
- 使用int执行整数运算,超过int范围使用long long
- 执行浮点数选用double,float单精度精度不够
2.1.2 类型转换
- 带符号数在表达式中同时出现无符号数时会自动的转化为无符号数,影响结果正确性
- double pi = 3, pi = 3.0
2.1.3 字面值常量
- 整形和浮点型字面值,字符和字符串字面值
单括号char型,双括号string型
编译器在每个字符串的结尾处加一个空字符‘\0’,所以字符串的实际长度比字面值多1 - 通过添加前缀或后缀可以改变字面值类型
- 布尔值字面值(true,false)和指针字面值(nullptr)
2.2 变量
2.2.1 变量定义
- int sum = 0, value, units_sold = 0
- 定义于函数体内部的变量将不被初始化
2.2.2 变量声明和定义的关系
- 声明规定了变量的类型和名字,定义申请了存储空间。
- 如果想要声明变量,需要在变量名前加extern并且不进行初始化
- 如果想在多个文件中使用同一个变量,需要将声明和定义分离
2.2.3变量命名规范
- 变量名一般是小写字母
- 自定义的类名一般以大写字母开头
2.2.4 名字的作用域
- c++中大多作用域以花括号分割
- 名字的有效区域始于名字的声明语句,以声明语句所在的作用域末端作为结束
- main函数内的名字拥有全局作用域
- 作用域有内层作用域和外层作用域,可以在内层作用域重新定义外层有的名字
2.3 复合类型
2.3.1 引用
- 引用是为对象起的另外一个名字;int &refval = ival
- 通过将声明符写成&d的形式来定义引用类型,其中d是声明的变量名
- 引用只能绑定在对象上,不能与字面值或者某个表达式的计算结果绑定
2.3.2 指针
-
指针与引用的不同:(1)指针本身是一个对象,允许对指针的赋值和拷贝,而且指针可以先后指向几个不同的对象。(2)引用本身并非一个对象,一旦定义了引用就无法绑定到另外的对象上。(3)指针无需在定义时赋初值,引用需要初始化。式
-
指针存放某个对象的地址:int *p = &ival,&是取地址符
-
声明语句中,指针的类型是用于被他指定的对象的类型,二者必须匹配
-
指针值:1.指向对象 2.指向紧邻对象所占空间的下一位置 3.空指针 4.无效指针
-
利用指针访问对象需要使用*
-
*pi指对象 pi指地址
-
空指针的三种声明方式:1. int *pi = nullptr / 0 / NULL
-
int *p 中空格放在星号的前后都可以,使用方式相同,只是强调的含义不同,星号紧贴变量名表示强调变量具有复合类型,有空格强调声明了复合类型
-
指向指针的指针
-
引用本身不是对象,但指针是对象,因此存在对指针的引用
2.4 const限制符
- 定义值不被改变的变量,使用const
- 如果程序包含多个文件,想在多个文件之间共享const对象,需要在前面添加extern关键字
- 允许将const int &绑定在int上,常量的引用无法修改绑定对象的值
2.5 处理类型
2.5.1 类型别名
- 两种方法定义类型别名,(1)typedef double wages;wages和double是同义词。(2)using SI = Sales_item Sales_item和SI是同义词
2.5.2 auto类型说明符
- auto类型可以让编译器分析所属类型
- 非常量的(const)引用不能绑定字面值:auto &h = 24 ❌
2.5.3 decltype 类型指示符
- decltype返回变量或表达式对应类型
- 如果decltype使用不加括号的变量,就是该变量的类型,如果使用加括号的变量,结果将得到引用,而引用必须初始化。
2.6 自定义数据结构
2.6.1 定义Sales_data类
- 以关键字struct开始,紧接着类名和类体{},类体右侧表示结束的}后必须跟着分号,因为类体后面可以紧跟着变量名表示对该类型对象的定义
- 类体定义类的成员,数据成员定义的方式和定义普通变量一样,可以为数据成员定义类内初始值
- 还可以用另一个人关键字class定义自己的数据结构
2.6.2 使用Sales_data类
2.6.3 编写自己的头文件
- 类一般不定义在函数体内,定义在头文件内,且类所在头文件的名字与类名相同