左值和右值:
当一个对象被用作右值的时候,用的是对象的值(内容);当对象被用作左值的时候,用的是对象的身份(在内存中的位置)
求值顺序:四种明确规定了运算对象的求值顺序的运算符:‘ && ’、‘ || ’、‘ ?: ’ 、‘ ,’。
1、处理复合表达式时:拿不准时用括号强制表达式组合关系复合程序逻辑的要求
:如果改变了某个运算对象的值,在表达式其他的地方不要再使用这个运算对象
2、bool值不要参与算术运算:因为bool值首先会被提升为int类型然后在求值转化,结果可能和逻辑不符合
3、取余运算符运算对象必须是整数类型
两数相除商一律向0取整(截除小数部分)
4、声明引用可以避免对元素值的拷贝
5、进行比较运算时除非比较对象是布尔类型,否则不要使用布尔字面值true和false作为运算对象
6、除非必须否则不用递增递减的后置版本。
7、数组转换为指针大多数情况下会发生,但用作decltype、&、 sizeof及typeid等时不会发生转换
8、强制类型转换可以将存在void类型中的指针取出
9、const_cast能改变对象的常量属性,但通过const_cast对常量进行写操作结果是未定义的(常用于函数重载)
10、reinterpret_cast 不用最好。
11、尽量避免强制类型转换,如果实在无法避免,则应尽量限制类型转换值的作用域,并且记录对相关类型的所有假设。