C++ Primer:第4章总结


第4章:表达式

4.1 基础

基本内容:

  1. 一元运算符、二元运算符、三元运算符、函数调用(特殊的运算符)。
  2. 运算符的优先级和结合律,运算对象的求值顺序。
  3. 运算对象转换,重载运算符,左值和右值。

备注:

  1. 左值使用对象的身份(位置),右值使用对象的值(内容)。左值可替换右值,反之不行。
  2. 明确求值顺序的4个运算符:与(&&) ,或(|| ),条件(?: ),逗号(,)。

4.2 算术运算符

基本内容:

  1. 一元正号(+)、一元负号(-)。
  2. 乘(*)、除(/)、取余(%)。
  3. 加(+)、减(-)。

备注:

  1. 算术运算符满足左结合律,其运算对象和求值结果都是右值。
  2. 布尔值不应参与运算。
  3. 算术表达式可能因为除数为0或溢出等情况产生未定义结果。
  4. 除法会删除余数,商一律向0取值;取余的运算对象必须是整数,m%(-n)等价于m%n,(-m)%n和(-m)%(-n)等价于-(m%n) 。

4.3 逻辑和关系运算符

基本内容:

  1. 逻辑非(!)。
  2. 小于(<),小于等于(<=),大于(>),大于等于(>=).
  3. 相等(=),不相等(!=)。
  4. 逻辑与(&&)。
  5. 逻辑或(||)。

备注:

  1. 除逻辑非(!)是右结合律外,其它逻辑和关系运算符都是左结合律。所有逻辑和关系运算符的运算对象和求值结果都是右值。
  2. 逻辑与(&&)和逻辑或(||)使用短路求值(只有左侧对象无法推出结果时才会计算右侧对象)。
  3. 引用类型可避免对过大元素的拷贝。
  4. 比较运算时,除非比较对象是布尔型,否则不要用true和false。

4.4 赋值运算符

基本内容:

  1. 赋值(=)。
  2. 符合赋值运算符(+=, -=, *=, /=, %=, <<=, >>=, &=, ^=, |=)

备注:

  1. 赋值运算符满足右结合律,赋值运算结果是左侧运算对象,它是一个可修改的左值。
  2. 初始化!=赋值。若左侧运算对象是内置类型,赋值时初始值列表最多包含一个值,而初始化可以是多个。如int i1[3] = {1, 2, 3};是对的,int i2[3];i2 = {1, 2, 3};是错的。
  3. 复合运算符等价于a = a op b;

4.5 递增和递减运算符

基本内容:

  1. 递增(++),递减(–)。
  2. 前置版本将对象本身作为左值返回,后置版本将对象原始值的副本作为右值返回。

备注:

  1. 除非必须,否则不要使用后置版本。因为后置版本需存储原始值作为返回值,编译器开销更大。
  2. 后置递增(递减)运算符优先级>解引用运算符。*p++等价于*(p++)。

4.6 成员访问运算符

基本内容:

  1. 点运算符(.), 箭头运算符(->)。
  2. ptr->men等价于(*ptr).men。
  3. 优先级:点运算符、箭头运算符 > 递增递减运算符 > 解引用运算符。

4.7 条件运算符

基本内容:

  1. 条件运算符(?:)
  2. 条件运算符形式:cond ? exp1 : exp2。若cond 为真则执行exp1 ,否则执行exp2。
  3. 条件运算的嵌套层数最好不超过两到三层。

4.8 位运算符

基本内容:

  1. 位求反(~)。
  2. 左移(<<),右移(>>)。
  3. 位与(&)。
  4. 位异或(^)。
  5. 位或(|)

备注:

  1. 位运算符的运算对象是整型,用于设置和检查二进制位。
  2. 位运算符尽量只用于处理无符号整数,有符号整数的符号位无明确处理方法,具体依赖于机器。
  3. 移位运算符(<<和>>)满足左结合律,右侧运算对象不能为负,且小于结果位数。

4.9 sizeof运算符

基本内容:

  1. sizeof运算符形式:sizeof (type) 或sizeof expr。
  2. sizeof满足右结合律,与解引用运算符优先级相同。

4.10 逗号运算符

基本内容:

  1. 逗号运算符先算左侧表达式,丢弃其结果,再算右侧表达式,返回其结果。

4.11 类型转换

基本内容:

  1. 隐式转换:算术转换,整型提升,无符号类型转换,数组转指针,指针间转换,转换成布尔类型,转换成常量,类类型定义转换。
  2. 显式转换:static_cast, dynamic_cast, const_cast, reinterpret_cast。

备注:

  1. 避免强制类型转换。

4.12 运算符优先级表

发布了77 篇原创文章 · 获赞 25 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_34801642/article/details/103989583