ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

《C++ Primer 中文版》第四 章读书笔记及习题解答

2021-09-16 12:03:28  阅读:104  来源: 互联网

标签:运算 读书笔记 对象 C++ 运算符 类型 求值 习题 表达式


目录

第四章 表达式

简介

  C++语言提供了一套丰富的运算符,并定义了这些运算符作用于内置类型的运算对象时所执行的操作。同时,当运算对象是类类型时,C++语言也允许由用户指定上述运算符的含义。本章主要介绍由语言本身定义、并用于内置类型的运算符,同时简单介绍几种标准库定义的运算符。第14章会专门介绍用户如何自定义适用于类类型的运算符。
  表达式是由一个或多个运算对象(operand)组成,对表达式求值将得到一个结果(result)。字面值和变量是最简单的表达式(expression),其结果就是字面值和变量的值。把一个运算符(operator)和一个或多个运算对象组合起来可以生成较复杂的表达式。

4.1 基础

  有几个基础概念对表达式求值过程中有影响,它们涉及大多数(甚至全部)表达式。本节先简要介绍这几个概念,后面小节将做更详细的讨论。

4.11 基本概念

  C++定义了一元运算符(unary operator)和二元运算符(binary operator)。作用于一个运算对象的运算符是一元运算符,如取地址符(&)和解引用符(*);作用于两个运算对象的运算符是二元运算符,如相等运算符(==)和乘法运算符(*)。除此之外,还有一个作用域三个运算对象的三元运算符。函数调用也是一种特殊的运算符,它对运算对象的数量没有限制。
  像符号*这样的符号既能作为一元运算符也能作为二元运算。作为一元运算符时执行解引用操作,作为二元运算符时执行乘法操作。它到底是几元运算符是由它的上下文决定。对于这类符号来说,它的用法互不相干,完全可以当成两个不同的符号

组合运算符和运算对象
  对于含有多个运算符的复杂表达式来说,要想理解它的含义首先要理解运算符的优先级(precedence)、结合律(associativity)以及运算对象的求值顺序(order of evaluation)。例如,下面这条表达式的求值结果依赖于表达式中运算符和运算对象的组合方式:下一节将介绍如何理解这样一条语句。

5+10*20/2;

运算对象转换
  在表达式求值的过程中,运算对象常常由一种类型转换成另外一种类型。尽管一般的二元运算符都要求两个运算对象的类型相同,但是很多时候即使运算对象的类型不同也没关系,只要它们能被转换成同一种类型即可
  例如,整数能转换成浮点数,浮点数也能转换成整数,但是指针不能转换成浮点数。让人有点意外的是,小整数类型(bool、char、short等)通常会被提升(promoted)成较大的整数类型,主要是int。4.11节将详细介绍类型转换的细节。

重载运算符
  C++语言定义了运算符作用于内置类型和复合类型的运算对象时所执行的操作。当运算对象作用于类类型的运算对象时,用户可以自定义其含义。因为这种自定义的过程事实上是为已存在的运算符赋予了另外一层含义,所以称之为重载运算符(overloaded operator)。IO库的>>和<<运算符以及string对象、vector对象和迭代器使用的运算符都是重载运算符。
  我们使用重载运算符时,其包括运算符的类型和返回值的类型,都是由该运算符定义的;但是运算对象的个数、运算符的优先级和结合律都是无法改变的。

左值和右值
  C++表达式分为左值和右值。这两个名词是从C语言继承过来的,原本是为了帮助记忆:左值可以位于赋值语句的左侧,右值则不能。
  在C++中二者的区别就没那么简单了。一个左值表达式的求值结果是一个对象或者一个函数,然而以常量对象为代表的某些左值实际上不能作为赋值语句的左侧运算对象。 此外虽然某些表达式的求值结果是对象,但是它们是右值。可以做一个简单的归纳:当一个对象被用作右值时,用的是对象的值(内容);当对象被用作左值的时候,用的是对象的身份(在内存中的位置)。

4.2 算术运算符。

4.3 逻辑和关系运算符

4.4 赋值运算符

4.5 递增和递减运算符

4.6 成员访问运算符

4.7 条件运算符

4.8 位运算符

4.9 sizeof运算符

4.10 逗号运算符

4.11 类型转换

4.12 运算符优先级表

小结

标签:运算,读书笔记,对象,C++,运算符,类型,求值,习题,表达式
来源: https://blog.csdn.net/qq_44732492/article/details/120324128

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有