endl:
调试时加上能够刷新缓冲区;
测试时可以使用excu <infile >outfile
来文件重定向
char:
char类型的有无符号是由编译器决定的,如果要存储不大整数,最好明确指定类型。
类型选择:
1、明确数值不为负时选择无符号;
2、一般选择int,超过int选择long long;
3、浮点运算选择double,其与float速度近似,一般不用long double
类型转换:
bool b = 42; //值为true
int i = b; //值为1
i = 3.14; //值为3
double pi = i; //值为3.0
unsigned char = -1 //值为255,超出范围时相当于对其可表示范围256取余
signed char = 256 //值未定义
切勿混用带符号和无符号类型:
字面值指定类型:
以u后缀,从unsigned int,unsigned long, unsigned long long中选择最小的作为其数据类型;
以l后缀至少long,以ll后缀从unsigned long和long long中选择;
浮点型字面值,以f后缀float类型,以l后缀为long double类型;
列表初始化:
int i = 0;
int i = {0}; //存在精度丢失时将会报错
int i{0}; //存在精度丢失时将会报错
int i(0);//不会报错
声明与定义:
变量可被声明多次,只能定义一次。
extern int i; //声明,用于使用别处变量
extern int i=1; //声明并定义
int j; //声明并定义
注意复合类型定义时的空格:
int* p, p2; //定义p为指针类型,p2为int, 写法不妥
int *p, *p2;
指针:
初始化所有指针,避免无法预估的错误。
生成空指针
int *p = nullptr;
int *p = 0;
int *p = NULL; //需要cstdlib,避免使用
任何非0指针条件值都为true。
void*指针类型能够存储任意类型地址,但无法访问对象,因为不知道对象类型。