1.c++定义了运算符作用于内置类型和符合类型的运算对象时所执行的操作。当运算符作用于类类型的运算对象时,用户可以自行定义其含义。
这种为已存在的运算符赋予了另外一层含义,称之为重载运算符。
2.取余运算的运算对象必须是整数类型。
3.除法运算中,两个运算对象的符号相同则商为正(如果不为0的话),否则商为负。
4.短路求值策略:
对于逻辑与&&来说,当且仅当左侧运算对象为真时,才对右侧运算对象求值。
对于逻辑或||来说,当且仅当左侧运算对象为假时,才对右侧运算对象取值。
5.关系运算符的求值结果是布尔值bool。
6.当布尔值转换成其他算术类型时,false转换成0,而true转换成1。
7.赋值运算符满足友结合律。
8.点运算符和箭头运算符都可用于访问成员,其中点运算符获取类对象的一个成员;箭头运算符与点运算符有关,ptr->men()等价于(*ptr).mem()。解引用运算符的优先级低于点运算符,所以这里必须加括号。
箭头运算符相当于先解引用再点运算符来访问成员函数,再通过调用运算符()来调用该函数。
9.sizeof运算符返回一条表达式或一个类型名字所占的字节数。满足右结合律,其所得的值是一个size_t类型。
10.隐式类型转换:
在条件中,非布尔值会转换成布尔类型;
初始化过程中,初始值转换成变量的类型;
赋值语句中,右侧运算对象转换成左侧运算对象的类型;
算术运算或关系运算的运算对象有多种类型,需要转换成同一种类型;
在大多数用到数组的表达式中,数组自动转换成指向数组首元素的指针;
11.强制类型转换:p144-145
任何具有明确定义的类型转换,只要不包含底层const,都可以使用static_cast。例如,通过一个运算对象强制转换成double类型就能使表达式执行浮点数除法:
double slope = static_cast<double>(j)/i ;
dynamic_cast支持运行时类型识别;
const_cast只能改变运算对象的底层const;
reinterpret_cast通常为运算对象的位模式提供较低层次上的重新解释。