4.1 基础
4.1.1 基本概念
- 重载运算符:用户自定义的用于类类型的运算对象的运算符。这个自定义过程为已存在的运算符赋予了另一层的含义。
- 左值右值:当一个对象被用作左值时,用的是对象的值(内容);当对象被用作右值时,用的是对象的身份(在内存中的位置)。
4.1.3 求值顺序
- 求值顺序:未指定执行顺序的表达式,如果指向并修改同一个对象,会引发错误产生未定义;只有4种运算符规定了从左到右的求值顺序(条件与&&、条件或||、条件运算符?:、逗号,)
4.2 算数运算符
运算符(左结合律) | 功能 |
---|---|
+、- | 一元正号、一元负号 |
*、/、% | 乘法、除法、求余 |
+、- | 加法、减法 |
- 整数相除:商向0取整;取余时m%(-n)=m%(n),-m%n=-(m%n)
- 整型提升:小整型(如short、char)总会自动提升为较大的整型,一般为int;较大的char(如w_char)提升为大整型中可容纳原值的最小一类,布尔类型提升成int型。
4.8 位运算符
移位运算符:右侧的移动位数必须非负且小于结果的位数;移出位被舍弃,符号位视机器而定
位求反运算符:char类型提升成int型,原来的位保持不变,高位添0;
4.9 sizeof运算符
- 引用类型:得到被引用对象所占空间的大小。
- 指针类型:得到指针本身所占空间的大小。
- 解引用:得到指针指向的对象所占空间的大小,指针不需有效。
- 数组类型:得到整个数组所占空间的大小。
- string或vector对象:返回该类型固定部分的大小。
4.10 逗号运算符
- 逗号运算符:先对左侧表达式求值,然后丢弃求值结果,真正的结果是右侧表达式的值
4.11 类型转换
- 数组指针转换:大多时候会自动隐式转换;当数组被当作decltype、&、sizeof、typeid的运算对象时,转换不发生。
- 指针的转换:0或nullptr可转换成任意指针类型,非底层const的指针可以转为void,底层const的指针可以转为const void。
- 命名的强制类型转换:static_cast(无底层const)、dynamic_cast(运行时类型识别)、const_cast(有底层const)、reinterpret_cast(低层的重新解释)
网友评论