2.1基本内置类型
基本内置类型包括算数类型和空类型。
2.11算数类型
类型的储存机制,地址的概念。
2.12类型之间的转换。
*:表达式中同时出现无符号int类型和int类型的情景。
2.13字面值常量
不同类型字面值常量的表示方法。
转义序列。
指定字面值的类型(前缀、后缀)
2.2变量
2.21变量定义
变量定义的基本形式是:类型说明符+变量名。
对象:具有某种数据类型的内存空间(本书把类和内置类型都算作对象)
变量的初始化:
初始化和复制是两个截然不同的操作。
列表初始化(c++11新特性)。
变量未做初始化时其值的不同情况。
2.22变量声明和定义的关系
声明使得一个文件能引用别的文件的变量。
定义负责创建变量名和与之相关的实体。
声明可以多次,定义只能一次。
extern的使用。
2.23标识符
变量命名规范
2.24名字的作用域
2.3复合类型
介绍复合类型中的两种:引用和指针。
变量的定义的一种更加通用的描述是:基本数据类型+声明符
2.31引用(左值引用)
作为对象的别名与其绑定,必须初始化且初始化后不能再更改绑定到别的对象。
对引用的操作实际上都是对其绑定对象的操作。
引用不是对象,不能定义引用的引用,也不能定义引用的指针。
引用的类型要和对象的类型严格匹配,且引用只能绑定在对象上而不能与字面值或某表达式的结果绑定在一起。(有例外,见2.41)
2.32指针
指针本身是一种对象。
指针的值(即地址)应属下列4种状态之一:
1.指向一个对象
2.指向紧邻对象所占空间的下一个位置
3.空指针
4.无效指针
访问2,3,4类型的指针都将引发错误。
*:void*指针
只能用于与其他指针比较、作为函数的输入输出、赋值给另一个void*指针,而不能用于操作所指的对象。
2.33复合类型的声明
确定代码中复合类型变量的类型:从右向左阅读
int *p; int *&r = p; //对指针的引用
2.4const限定符
const限定的变量一旦初始化后就不能更改(用处:希望用一个变量表示缓冲区大小,使用变量的好处是当觉得缓冲区大小不再合适时很容易对其进行调整)
const对象必须初始化。
2.41const的引用(简称常量引用)
不能用const的引用改变指向对象的值。
初始化常量引用时允许用任意表达式作为初始值,只要该表达式的结果能转换成引用的类型即可。且允许为一个常量引用绑定非常量对象、字面值甚至是一般表达式。(但非常量引用不能绑定常量对象)
2.42指针和const
指向常量的指针:指针指向的对象是常量 const int *p;
常量指针:指针本身是个常量不可变 int *const p;
指向常量的常量指针:指针指向的对象是常量,指针本身也是常量 const int *const p;
关于常量指针的定义,书上(中译版)和网上说法各执一词,其实只要明确是指针本身是常量还是指针所指对象是常量即可,可参考下面博文https://blog.csdn.net/bobbob32/article/details/79170353
2.43顶层const
顶层const:本身是一个常量
底层const:所指或绑定的对象是一个常量
2.44constexpr和常量表达式
常量表达式:值不会改变且在编译过程中就能得到计算结果的表达式。
constexpr类型的变量一定是一个常量且必须用常量表达式初始化。