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