算术类型的尺寸在不同机器上有所差别
允许编译器设置更大的尺寸,但是要保证short <= int <= long <= long long
在以上类型前加上unsigned得到无符号版本,在以上类型前加上signed得到有符号版本
需要注意的是,单独使用unsigned代表unsigned int
1.1 类型转换
类型修饰符&和*只从属于某个变量
int a, *b; //a的类型为int,b的类型为int指针
初始化和赋值都使用=来完成,但是这是两个不同的概念。初始化的含义是在创建变量时使用=赋上一个初始值。赋值的含义是将已创建好的变量中的值擦除,赋上一个新的值。
int i = 1; //初始化
i = 2; //赋值
2.1.1 列表初始化
类类型变量需要使用默认构造函数进行默认初始化。如果在需要进行默认初始化的时候无法提供默认构造函数,将会编译报错。当用户希望类类型变量进行默认初始化时,容易犯以下错误。
People obj1(); //错误:obj1是个函数
People obj2; //正确:obj2是个对象,被默认初始化有一点需要特别注意,当用户在块作用域中定义内置类型变量,但不给初始值时,该变量不会被初始化,因此变量的值是未定义的。而且编译器不一定会给出错误提示,有些编译器会提示错误,有些编译器则不会。所以建议手动初始化每一个内置类型的变量。
2.1.3 值初始化
当出现以下情况时,将会触发值初始化
定义数组时提供的初始值数量小于数组大小时,没有对应初始值的元素被值初始化
定义局部静态变量,但不给初始值
通过Type varName = Type()显式进行值初始化
内置类型变量值初始化为0
类类型变量通过默认构造函数进行值初始化
2.2 变量声明和定义的关系
C++支持分离式编译(separate compilation),声明和定义可以分开进行。
一个变量只能被定义一次,但可以被声明多次
声明的作用式让编译器直到可以在某个源文件中链接到定义,需要注意的是,绝对不会去头文件链接定义。
声明一个变量需要使用extern关键字,且不能初始化例如
//test1.h
extern int i; //声明