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"); //可以
}