1、C++中的复合类型
引用:
int i = 2;
int &j = i;
变量j为变量i的引用。引用的定义时,引用的类型要和与之绑定的对象类型严格匹配,且定义时必须绑定对象而非是响应的字面值常量。和 int *j = &i; (此时&为取地址符) 是一样的。
指针:
指针无须在定义时赋初值。指针的值是指向对象的地址。取指针指向的对象时用*p(此时*为解引用符)。在指针的定义时建议全部初始化。
引用不是对象,而指针是对象,它分配内存空间。
2、cstdlib是C++里面的一个常用函数库,等价于C中的<stdlib.h>。其中包含了NULL等宏。此外预处理不属于命名空间std。
3、const(常量):分为顶层const和底层const
对const的引用格式:const int ci = 1; const int &ri = ci;
对const的引用的初始化方式:int i = 1; const int &r1 = i; const int &r2 = 1; const int &r3 = ri * 2; (对const的引用不能绑定到一个临时量上)
指向const的指针格式:const double pi = 3.14; const double *ppi = π
const指针:int errNum = 0; int *const curErr = &errNum; const double pi = 3.14; const double *ppi = π 常量指针不能修改指针,但是如果指针指向的对象是非常量的,那么可以通过*解引用符修改指向对象的值。
如果确定变量是一个常量表达式,那么可以把它声明为constexpr类型。
4、处理类型
①typedef(类型别名)
typedef double wages; // wages是double的同义词
typedef wages base, *p; // base是double的同义词,p是double* 的同义词
using(别名声明,C++11中新增)
using wages = double; // wages是double的同义词
②auto(类型说明符,C++11中新增)
auto item = val1 + val2; // item的类型由val1和val2相加的结果进行推断
auto i = 0, *p = &i; // 正确:i是整型、p是整型指针
auto i = 0, pi = 3.14; // 错误:i和pi的类型不一致
③decltype(类型指示符,C++11中新增)
decltype(fn()) sum = x; // sum的类型由函数fn()的返回值决定
5、在程序中每个头文件都建议使用头文件保护符