前言
建议看书的时候就看一下异常,其它的直接跳过
一、简单语句
 一条表达式语句以;结尾,它的作用是执行表达式并丢弃掉求值结果。一行如果只有一个;也是一条语句,称为空语句。复合语句时用{}括起来的语句或者声明, 也称为块,第二章在作用域有提到一个块就是一个独立的作用域。如果一个{}里面什么也没有,称为空块。
条件语句注意事项
- if else尽量把- {}带上,免得出bug不好找
- switch case中,不能在某个- case块中定义变量,因为如果该变量在后续的- case中有使用,就会发生编译错误。
- do while和- while的区别在于前者先执行循环体再检测条件,后者反之。所以- do while不管怎样都会进行一次循环。
二、异常
 C++中的异常处理有三种:1)throw表达式:引发异常;2)try catch:try中抛出的异常会被catch中的代码进行处理;3)异常类:用于在throw和catch之间传递异常的具体信息。
throw表达式
 举一个经典的除数不为0 的例子,当输入的除数为0时,通过throw引发异常。这里引发的异常并没有被处理
int a, b;
	cin >> a >> b;
	if (b != 0) {
		cout << "a / b = " << a / b << endl;
	} else {
		throw runtime_error("除数不能为0!!!");
	}
try catch
 try后面可以跟多个catch块,以处理多个不同类型的异常。结合上面throw引发的异常,通过catch进行处理。
try {
		if (b != 0) {
			cout << "a / b = " << a / b << endl;	
		} else {
			throw runtime_error("除数不能为0!!!");
		}
	} catch (runtime_error e) {
		cout << e.what() << endl; // 处理异常
	}

 当一个异常被抛出时,寻找处理异常代码的过程与函数调用链相反。首先会去引出异常的函数寻找处理代码,如果没有,再去调用函数的函数寻找代码被且终止最初引发异常的函数,如果当前的函数也没有,就去找下一个调用当前的函数的函数中是否有异常处理代码,一直循环,直到没有找到任何处理函数,那么程序最终会转到名为terminate的标准款函数。执行了该函的程序都是非正常退出。如果一开始就没有定义try catch,那么当抛出异常时就会直接转到terminate函数。
标准异常
 C++定义了一组异常库,熟悉并使用这些内置的异常信息可以让程序更加的完善。以下是定义异常类的4个头文件
-  exception定义最通用的异常类,它只报告异常的发生,不提供任何额外信息。
-  stdexcept定义了常用的几种异常。如下。 
-  new头文件定义了bad_alloc,后面章节会介绍
-  type_info定义了bad_cast异常类型
头文件定义了bad_alloc,后面章节会介绍
-  type_info定义了bad_cast异常类型 在上面的这些异常类中,我们只能以默认初始化的方式初始化 exception、bad_alloc和bad_cast对象,不能给这些对象赋予初始值。


















