第4章 表达式

4.1 基础

4.1.1 基本概念

  1. 重载运算符:用户自定义的用于类类型的运算对象的运算符。这个自定义过程为已存在的运算符赋予了另一层的含义。
  2. 左值右值:当一个对象被用作左值时,用的是对象的值(内容);当对象被用作右值时,用的是对象的身份(在内存中的位置)。

4.1.3 求值顺序

  1. 求值顺序:未指定执行顺序的表达式,如果指向并修改同一个对象,会引发错误产生未定义;只有4种运算符规定了从左到右的求值顺序(条件与&&、条件或||、条件运算符?:、逗号,)

4.2 算数运算符

运算符(左结合律) 功能
+、- 一元正号、一元负号
*、/、% 乘法、除法、求余
+、- 加法、减法
  1. 整数相除:商向0取整;取余时m%(-n)=m%(n),-m%n=-(m%n)
  2. 整型提升:小整型(如short、char)总会自动提升为较大的整型,一般为int;较大的char(如w_char)提升为大整型中可容纳原值的最小一类,布尔类型提升成int型。

4.8 位运算符

移位运算符:右侧的移动位数必须非负且小于结果的位数;移出位被舍弃,符号位视机器而定
位求反运算符:char类型提升成int型,原来的位保持不变,高位添0;

4.9 sizeof运算符

  1. 引用类型:得到被引用对象所占空间的大小。
  2. 指针类型:得到指针本身所占空间的大小。
  3. 解引用:得到指针指向的对象所占空间的大小,指针不需有效。
  4. 数组类型:得到整个数组所占空间的大小。
  5. string或vector对象:返回该类型固定部分的大小。

4.10 逗号运算符

  1. 逗号运算符:先对左侧表达式求值,然后丢弃求值结果,真正的结果是右侧表达式的值

4.11 类型转换

  1. 数组指针转换:大多时候会自动隐式转换;当数组被当作decltype、&、sizeof、typeid的运算对象时,转换不发生。
  2. 指针的转换:0或nullptr可转换成任意指针类型,非底层const的指针可以转为void,底层const的指针可以转为const void
  3. 命名的强制类型转换:static_cast(无底层const)、dynamic_cast(运行时类型识别)、const_cast(有底层const)、reinterpret_cast(低层的重新解释)

你可能感兴趣的:(第4章 表达式)