1、手动明确调用顺序防止出错
int i = f() * g();
//f()和g()调用顺序不确定
int a, b;
a = f();
b = g();
i = a + b;
2、赋值运算符返回的是左侧运算对象,赋值运算还满足右结合律。赋值运算符优先级较低,低于关系运算符。
int a, b;
a = b = 0;
//即a = (b = 0);
b = 0;
a = b;
3、++i先加后用,如果不需要保留修改前的值尽量用前置运算符
int i, j, k;
i =0;
j = i++; //j = 0; i = 1;
k = ++i; //k =1 ; i = 2;
int val, *q;
val = *q++; //val = *q,q++
4、<<左移补0;>>右移补符号位;~取反;^异或
5、类型转换:(1)运算:向大范围,double浮点类型转换;(2)赋值:向左侧类型转换
//强制类型转换
double s = static_cast<double>(p);
//const_cast只能操作const对象
const char *pc;
char *p = const_cast<char *>(pc);
6、for语句头定义的对象只在for循环体内可见
7、break终止离它最近的循环体或switch;continue使最近循环体立即进入下一次迭代