4.1基础
4.1.1 基本概念
一元运算符:取地址符(&)、解引用符(*)
二元运算符:相等运算符(==)
二元运算时小整数类型(如bool、char、short等)通常会被提升(promoted)成较大的整数类型(如int)
重载运算符
当运算符作用于类类型的运算对象时,用户可以自行定义其含义。
左值和右值:当一个对象被用作右值的时候,用的是对象的值(内容);当对象被用作左值的时候,用的是对象的身份(在内存中的位置)
4.5 递增和递减运算符
递增和递减有两种形式
除非必须,否则不用递增递减运算符的后置版本
- 前置版本:首先将运算对象加(减)1,然后将改变后的对象作为求值结果。
- 后置版本:先将求职结果设置为对象改变之前的副本,然后执行运算对象加(减)1。
4.6 成员访问运算符
ptr->men 等价于 (*ptr).men
4.8 位运算符
4.9 sizeof运算符
返回一条表达式或一个类型名字所占的字节数
4.11 类型转换
隐式转换无需程序员介入。
4.11.1算数转换
把一种算数类型转换成另一种算数类型
整形提升:负责把小整数类型转换成较大的整数类型
4.11.3显示转换
使用某种方法将某个对象强制转化为double,称为强制类型转换(cast)
static_cast
任何具有明确定义的类型转换,只要不包含底层const,都可以使用static_cast
double a=static_cast<double>(j)/i
一般编译器发现一个较大的算数类型试图赋值给较小的类型的时候,就会给出警告信息。但是当执行了强制转换之后,警告信息就被关闭了。
可以使用static_cast将void*所指向的对象转化为指向对象的类型。
const_cast
只能改变运算对象底层的const(去掉const性质)
不能改变类型
const char *pc;
char *p=const_cast<char*>(pc);
注意:如果对象原本就是常量的话,使用const_cast会产生未定义的后果
reinterpret_cast
为运对象的位模式提供较低层次上的重新解释。