表达式
1.位运算符
1.1 一种名为bitset的标准库类型可以表示任意大小的二进制位集合。
1.2 运算符:~ << >> & | ^(异或)
1.3 符号位如何处理没有明确的规定,强烈建议将位运算符用于处理无符号类型。
1.4 不要将位运算符和逻辑运算符(&&、||、!)搞混
1.5 bool status=quiz&(UL1<<27); // 第27个同学通过测验
2.sizeof运算符
2.1 Sale_data *p; sizeof(p); // 指针所占空间大小 sizeof(*p) // p所指类型空间的大小
2.2 sizeof Sale_data::revenue; // 不需要具体对象,可以根据类直接获取类成员的大小
2.3 sizeof 不会把数组转换为指针进行处理
2.4 sizeof返回值是一个常量表达式,我们可以用其结果声明数组的维度。
3.类型转换
3.1 int ia[10]; int *ip=ia; // ia转换成指向数组的首元素的指针
3.2 当数组用作decltype & sizeof typeid等运算符运算对象的时候,上述转换不会进行发生。
4.显示转换
强制类型转换
cast-name<type>(expression);
static_cast 1.较大算术类型赋值给较小算术类型 2. void *p=&d; double *dp=static_cast<double *>(p); 强制转换的结果与原始地址值相等,必须保证我们转换后所得的类型就是指针所指的类型。d一定为double型才正确
const_cast const char *cp; char *q=static_cast<char *>(cp); // 错误 static_cast不能转换掉const性质
static_cast <string> (cp); // 字面值转换为string可以 const_cast<string>(cp); // 错误 const_cast只改变常量属性