第四章 表达式
4.1 基础
1、左值和右值
当一个对象被用作右值的时候,用的是对象的值(内容);当对象被用作左值的时候,用的是对象的身份(在内存中的位置)
4.2 算术运算符
1、除法截断
C++11标准规定商一律向0取整(即直接切除小数部分)
4.3 逻辑和关系运算符
1、短路求值,提高效率
2、巧用引用,省去拷贝的开销
一般传入参数的大小比较大,值传递时拷贝比较麻烦,考虑使用引用传递。
4.5 递增和递减运算符
1、除非必要,否则不使用后置递减运算符
前置版本的递增运算符避免了不必要的工作,它把值加1后直接返回改变了的运算对象。
与此相比,后置版本需要将原始值存储下来以便于返回这个未修改的内容。如果我们不需要修改前的值,那么后置版本的操作将是一种浪费。
2、小技巧:利用后置递增遍历元素
4.8 位运算符
1、位运算符最好用于处理无符号类型
关于符号位如何处理没有明确的规定,所以强烈建议仅将位运算符用于处理无符号类型。
2、位移运算符的左结合律
cout << "hi" << "there" << endl;
等同于
((cout << "hi") << "there" )<< endl;
4.9 sizeof
1、巧用sizeof,计算数组大小
4.11 类型转换
1、static_cast:最常用的转换方式
2、const_cast: 去掉const属性的转换方式
3、reinterpret_cast
4、尽量避免强制类型转换
5、尽量避免使用旧式的强制类型转换
double a = 2.2;
int b = (int)a;
像上面这种,在变量前面用括号将转换类型括起来的转换方式称为旧式的类型转换。