4 表达式
4.1 基础
当一个对象被用作右值的时候,用的是对象的值(内容);当对象被用作左值的时候,用的是对象的身份(在内存中的位置)。左值:内容;右值:内存位置
4.2 算术运算符
一元负号运算符bool b2 = -b; //b2是true!
运算符%俗称“取余”或“取模”运算符。其中参与取余运算的运算对象必须是整数类型
C++早期版本允许m%n的符号匹配n的符号,而且商向负无穷一侧取整。
在C++11新标准中已经被禁止使用了,除了-m导致溢出的特殊情况,其他时候(-m)/n和m/(-n)都等于-(m/n),m%(-n)等于m%n,(-m)%n等于-(m%n)
4.3 逻辑和关系运算符
**注意:**进行比较运算时除非比较的对象时布尔类型,否则不要使用布尔字面值true和false作为运算对象
4.5 递增和递减运算符
**注意:前置版本的递增运算符避免了不必要的工作,它把值加1后直接返回改变了的运算对象。而后置版本需要将原始值存储下来以便于返回这个未修改的内容。**如果我们不需要修改前的值,那么后置版本就是一种浪费
4.9 sizeof运算符
C++11新标准允许我,恶魔使用作用域运算符来获取类成员的大小。通常情况下只有通过类的对象才能访问到类的成员,但是sizeof运算符无须我们提供一个具体的对象,因为要想知道类成员的大小无须真的获取该成员
sizeof运算符的结果部分地依赖于其作用的类型:
- 对char或者类型为char的表达式执行sizeof运算,得到1
- 对引用类型执行sizeof运算得到被引用对象所占空间的大小
- 对指针执行sizeof运算得到指针本身所占空间的大小
- 对解引用指针执行sizeof运算得到指针指向的对象所占空间的大小,指针不需要有效
- 对数组执行sizeof运算得到整个数组所占空间的大小,等价于对数组中所有的元素各执行一次sizeof运算并将所得结果求和。注意,sizeof运算不会把数组转换成指针来处理
- 对string对象或vector对象执行sizeof运算只返回该类型固定部分的大小,不会计算对象中元素占用了多少空间
5 语句
5.4迭代语句
do while 语句应该再小括号包围起来的条件后面用一个分号表示语句结束
5.6 try语句块和异常处理
异常处理包括:
- throw表达式,异常检测部分使用throw表达式来表示它遇到了无法处理的问题。我们说throw引发了异常
- try语句块,异常处理部分使用try语句块处理异常。try语句块以关键字try开始,并以一个或多个catch子句结束。try语句块中代码抛出的异常通常会被某个catch子句处理。因为catch子句“处理”异常,所以他们也被称为异常处理代码
- 一套异常类,用于在throw表达式和相关的catch子句之间传递异常的具体信息