1 short和int至少16位,long至少是32位,long long一般是64位的。
2 unsigned u=10; int i=-42; u+i=4294967264;先将-42转成无符号数再进行相加。
3 转义序列:
换行符: \n 横向制表符:\t 报警:\a 纵向制表符:\v
退格符:\b 双引号:\” 反斜线:\\ 问号:\?
回车符:\r
4 变量初始化方法:
int units_sold1 = 0;
int units_sold2 = {0};
int units_sold3{0};
int units_sold4(0);
long double ld=3.141519265436;
//int a{ld},b={ld}; 错误,转换未执行
int c(ld),d=ld;
5 double salary=wage=9999.999; 非法操作,同一语句初始化要分别进行
6 如果声明一个变量而非定义它,就在变量名前添加关键字extern,而且不要显示初始化变量;
变量能且只能被定义一次,但可以被多次声明;
7 标识符由字母、数字和下划线组成,其中必须以字母或下划线开头;
8 引用为对象起了另一个名字,引用本身不是一个对象,不能定义引用的引用;
int ival = 1024;
int &refVal = ival;
//int &refVal2; //报错,引用必须初始化
//int &refVal4=10;//报错,引用必须是一个对象
double dval = 3.14;
//int &refVal5=dval;//报错,引用的类型必须一致
9 指针是指向另外一种类型的复合类型,指针必须指向指定地址,引用不是对象,没有实际地址,所以不能定义指向引用的指针,空指针初始化;
int *p1 = nullptr;
int *p2 = 0;
int *p3 = NULL;
Void*是一种特殊的指针类型,可用于存放任意对象的地址。
指针是对象,存在对指针的引用。
10 const限定符
const int bufSize = 512;
//bufSize=512; const对象不能从新写
//const int k;//错误,k是一个未经初始化的常量
const int ci = 1024;
const int &r1 = ci;
//r1=42; r1是对常量的引用
//int &r2=ci;//不能让非常量引用指向一个常量对象
const int &r2 = 42;
int i = 42;
const int &r3 = i;
const int &r4 = r3 * 2;
//int &r5=r3*2;
要想使用没有初始化的const,可以加extern关键字;
11 顶层const表示指针本身是个常量,而底层const表示指针所指的对象是一个常量。
int *const p1 = &i;//不能改变p1的值,这是一个顶层const
const int c2 = 42; //ci值不能改变,是一个顶层const
const int *p2 = &ci; //p2值可以改变,是一个底层const
12 常量表达式是指不会改变且编译过程中就能得到计算结果的表达式。
constexpr int mf = 20;
constexpr int limit = mf + 1;
const int *p = nullptr;//p是一个指向整形常量的指针
constexpr int *q = nullptr;//q是一个指向整形的常量指针
constexpr定义的对像改变为顶层const;
13 类型别名
typedef char *pString;
const pString cstr = 0;//cstr是指向char的常量指针
const pString *ps;//ps是一个指针,它的对象是指向char的常量指针
14 decltype类型指示符
int m = 42, *p3 = &m, &r5 = m;
decltype(r5+0) b;
//decltype(*p3) c; 引用类型必须初始化话
//decltype((i)) d;
decltype(i) e;
如果表达式的内容是解引用操作,则decltype得到引用类型。