【C++基础】重抛异常与异常的使用场景
生活随笔
收集整理的這篇文章主要介紹了
【C++基础】重抛异常与异常的使用场景
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
重拋異常
異常處理程序可以重新拋出異常。
當(dāng)它無法處理該異常,或想通知它的調(diào)用者發(fā)生了一個異常,此時就需要重拋異常:
1、拋出捕獲的異常
2、重新拋出另一個不同于已經(jīng)捕獲異常:
class MyException: public logic_error { };try {throw logic_error(); // 拋出派生異常對象 } catch (logic_error& e) { // catch參數(shù)為基類異常,但可以捕獲所有派生類異常對象//MyException* p = dynamic_cast<MyException*>(&e); // 轉(zhuǎn)指針失敗不會再拋異常MyException& p = dynamic_cast< MyException&>(e); // 引用轉(zhuǎn)換失敗會拋 std::bad_cast異常cout << p.what() << endl; // 上面拋異常,本語句被跳過 }異常的使用場景
1、當(dāng)一個外部的問題阻止你的程序運行時,拋異常:
如:(第三條的笑話真冷。。。)
2、如果函數(shù)無法完成它所告知的功能并建立其正常的后置狀態(tài),拋異常
構(gòu)造函數(shù)失敗。例如vector的構(gòu)造函數(shù)應(yīng)創(chuàng)建一個對象,但對象占內(nèi)存太大導(dǎo)致無法構(gòu)建,那么應(yīng)該拋異常
何時不使用異常
1、只發(fā)生在單獨函數(shù)中的簡單錯誤不要用異常處理
2、不要用異常處理編碼錯誤,可以用assert()中斷程序執(zhí)行然后調(diào)試
3、不要用異常來控制程序流程,不要用throw來結(jié)束循環(huán)
4、實時系統(tǒng)中不用異常(航天飛機控制程序、生命維持系統(tǒng)等)
總結(jié)
以上是生活随笔為你收集整理的【C++基础】重抛异常与异常的使用场景的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【C++基础】C++11的noexcep
- 下一篇: 【C++基础】模板基础与函数模板