# 基本内置类型
## 算术类型
算数类型的尺寸在不同的机器上有所不同,通常编译器允许赋予这些类型更大的尺寸,尺寸不同能表示的数据范围就不同。
| 类型 | 说明 | 最小字节Byte | 最小尺寸bit |
| ----------- | -------------- | ------------ | ------------ |
| bool | 布尔类型 | 未定义 | 未定义 |
| char | 字符 | 1 | 8位 |
| wchar_t | 宽字符 | 2 | 16位 |
| char16_t | Unicode字符 | 2 | 16位 |
| char32_t | Unicode字符 | 4 | 32位 |
| short | 短整型 | 2 | 16位 |
| int | 整型 | 4 | 16位 |
| long | 长整型 | 4 | 32位 |
| long long | 超长整型 | 8 | 64位 |
| float | 单精度浮点型 | 4 | 6位有效数字 |
| double | 双精度浮点型 | 8 | 10位有效数字 |
| long double | 扩展精度浮点型 | 16 | 10位有效数字 |
布尔类型的取值为 `true` 或者 `false` 。通常在64位的计算机中,int类型的变量占4 Byte,char类型的变量占1 Byte,long类型的变量占4 Byte,float类型的变量占4 Byte,double类型的变量占8 Byte。浮点型可表示单精度、双精度和扩展精度。除了字符类型和布尔类型,其他算术类型可以有有符号类型和无符号类型。
## 字面值常量
整型字面值常量可以写成十进制、八进制和十六进制数的形式。默认为十进制,以0开头的为八进制,以0x开头的为十六进制。
`nullptr` 是一个特殊的字面值常量,常用来赋值给空指针。用预处理变量 `NULL` 来指定空指针,和用 0 初始化指针变量是一样的,`NULL` 在标准库 `cstdlib` 中定义,在新标准下尽量使用 `nullptr` 。
# 复合类型
## 引用
引用必须初始化。引用一般都指的是左值引用。引用本身不是对象。
## 指针
指针实现了对象的间接访问。指针本身是一个对象,允许对指针赋值和拷贝。在指针的生命周期内,它可以先后指向几个不同的对象。指针无需在定义时赋值。`void*` 是一种特殊的指针类型,可以存放任意类型对象的地址,指向任意对象。