第2章

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++的作用域规则

 

你可能感兴趣的:(第2章)