基本内置类型
signed char范围:-128 ~ 127
unsigned char范围:0 ~ 255
- 赋给无符号类型和符号类型超过范围的值会发生的情况:
无符号类型:初始值对无符号类型表示数值总数取模后的余数
符号类型:未定义
- 当算数表达式中既有无符号数又有int时,将int转换成无符号数
- 字符串字面值:
实质是由常量字符构成的数组(char[])
编译器在每个字符串结尾添加空字符'\0'
变量
- 变量默认初始化:
函数体外的变量被初始化为0
函数体内部的内置类型变量将不被初始化
- 特殊初始化方式:
如果列表{}初始化时初始值类型转换存在信息丢失风险(如3.14赋值给int),编译器将报错
- 利用extern声明而并非定义变量:
复合类型
1. 引用
必须初始化,必须绑定在对象上,不允许改变引用绑定的对象
引用不是对象,不能定义引用的引用
2. 指针
- 生成空指针的方法:
- 指向指针的引用:
从右向左阅读r的定义,离变量名最近的符号对变量类型有直接的影响
const限定符
const变量必须初始化
编译器在编译过程中把const变量的地方替换成对应的值
如果需要在多个文件之间共享,需要在声明和定义处添加extern关键字
引用
- 对常量的引用必须也为常量引用:
- 常量引用可以指向非常量,不允许通过该引用修改变量:
- 允许将常量引用绑定到表达式上,编译器会构造一个临时量,将常量引用绑定到临时量对象上
指针
- 存放常量对象地址必须用指向常量的指针(指向常量的指针可以指向非常量对象,不能通过指针改变变量的值):
- 常量指针必须初始化,且不能改变其存放的地址
顶层const:本身是个常量
底层const:所指对象是个常量
- 执行拷贝时,顶层const不受影响,底层const必须一致:
constexpr常量表达式
顶层const
值不会改变,在编译过程就能得到计算结果的表达式
constexpr指针能够指向地址固定不变的对象,如函数体外部对象
处理类型
类别别名
- 定义方式:
- 对指针的定义:
auto类型
auto忽略顶层const,保留底层const
decltype指示符
- 根据表达式推断类型
- 引用:
自定义数据结构
类的数据成员可以提供初始值,没有初始值的将被默认初始化
- 头文件保护符:
第一次包含xxx.h时,会执行所有内容;后面再一次包含xxx.h时,会忽略#ifndef 和 #endif之间部分