1.c++的异常处理机制被称为不可恢复的(nonresumptive)
2.栈展开(stack unwinding)
    如果找到一个catch子句, 则该异常被处理, 如果没有找到catch子句, 则在主调函数继续查找
    这个过程沿着潜逃函数调用链向上继续, 直到找到该异常的catch子句.
3.重新抛出(rethow)
    throw; //rethrow语句只能出现在catch子句飞复合语句中
    被抛出的异常就是原来的异常对象
4.把catch子句中的异常对象声明为引用, 免去了对象的内存拷贝, 又可以确保应用在catch子句中的异常对象上的修改操作, 能够反映到被重新抛出的异常

对象上
5.catch-all
    try {
        ....
    }
    catch(...) {} //catch-all格式
6.catch子句被检查的顺序与它们在try块之后出现的顺序相同, 一旦找到了一个匹配, 则后续的catch子句将不再检查
7.异常规范(exception specification)
    void foo() throw(Object); //这种声明就是异常规范
    异常声明是函数接口的一部分
8.异常规范不允许重被抛出的异常类型到异常规范制定的类型之间的转换:
    void foo() throw(string) {
        ....
        throw "exception";  //不允许从const char* 到string的转换, 此时调用unexpected()
        throw string("exception"); //可以
    }