1、不要混用带符号类型和无符号类型,混用时带符号类型将自动转换成无符号类型
2、形如-42字面值为42,‘-’表示对字面值取负
3、转义字符:反斜杠\后接的八进制数若超过3个只有前3个与\构成转义序列。
4、对象:通常情况下,对象是指一块能存储数据并具有某种类型的内存空间
5、初始化不是赋值!
6、定义于所有函数体之外的变量自动初始化为0,定义于函数体内部的变量不自动初始化
7、类的对象若没有显示的初始化,其值由类确定
8、变量声明:规定了变量的类型和名字;不申请内存
9、定义变量:规定变量的类型和名字并申请存储空间,可能会赋初值
10、如果要声明而非定义:添加关键字 extern,并不要显示的初始化
11、静态类型语言(statically typed) ,编译阶段检查类型
12、标识符:用户自定义的标识符不能连续出现两个下划线,也不能下划线紧接大写字母,定义在函数体外的标识符不能以下划线开头
13、作用域:当作用域操作符左侧为空时,向全局作用域发出请求获取作用域右侧名字对应的变量(若函数可能用到某个全局变量,最好不要再定义一个同名局部作用域)
14、引用:引用必须初始化,初始化后会和初始值一直绑定。引用并非对象,不能定义引用的引用
15、引用类型要与绑定对象严格匹配,不能与字面值或某个表达式的结果绑定
2.3.2 指针
1、在一条语句中定义多个指针时,每个变量前都必须有符号‘*’;
2、利用指针访问对象使用*解引用符
3、&、*:
int i = 42
int &r = i; //&紧随类型名出现,是声明的一部分,r是一个引用
int *p //*紧随类型名出现,是声明的一步分,p是一个指针
p = &i //&出现在表达式中,是一个取地址符
*p = i; //*出现在表达式中,是一个解引用符
int &r2 = *p //&是声明的一部分, * 是一个解引用符
4、使用指针一定要初始化所有的指针
5、赋值永远改变的是等号左侧的对象
6、void*类型的指针可以存放任意类型的指针
2.3.3 理解复合类型的声明
1、一条定义语句可能定义出不同类型的变量
2、指向指针的引用:
int i = 42;
int *p; //p是一个int型的指针
int *&r = p; //r是一个对p的引用
r = &i //r 引用了一个指针,因此给r赋值&i就是令p指向i
*r = 0; //解引用r得到i,也就是p指向的对象,将i的值改为0
2.4 const
1、默认状态下const对象仅在文件内有效,如果要在多个文件下共享const对象,必须在变量定义之前添加extern
初始化“常量引用”时,允许用任意表达式作为初始值,只要该表达式能转换为引用类型即可。(相当于绑定一个临时量(我的理解))
之所以不是常量引用则不允许绑定“临时量”,因为改变一个 临时量是非法的所有绑定一个临时量也是非法的
2、对const的引用仅限定引用
3、只能用指向常量的指针存放常量的地址,可以用指向常量的指针指向非常量;
4、常量指针:必须初始化,指向的“位置”不能改变
2.4.3 顶层const
1、顶层const指指针本身是个常量(top-level const)
2、底层const指指针所指的对象是一个常量(low-level const)
3、用于声明引用的const都是底层const
2.4.4 constexpr和常量表达式
1、如果认定一个变量是一个常量表达式就把他声明成constexpr类型
2、constexpr指针的初始值必须是nullptr或者0或者是存储于某个固定地址中的对象
2.5 处理类型
2.5.1 类型别名
类型别名(type alias) 有两种方法可用于定义类型别名:
1.typedef:
2.别名声明: using SI = Sales_item; //SI是Sales_item的同义词
2、指针常量和类型别名:
用const修饰的是指针类型是顶层const 不能替换后理解
2.5.3 auto类型说明符
auto 一条声明语句只能有一个基本数据类型
2.5.4 decltype 类型指示符
decltype ((variable))结果永远是引用
decltype(variable)结果只有当variable本身就是一个引用时才是引用
2.6.3 编写自己的头文件
头文件通常包含那些只能被定义一次的实体
预处理变量无视C++的作用域规则