大家好,我是情報小哥~
1、什么是異常處理
有經驗的朋友應該知道,在正常的C和C++編程過程中難免會碰到程序不按照原本設計運行的情況。
最常見的有除法分母為零,數組越界,內存分配失效、打開相應文件失敗等等。
一個程序的健壯不僅僅有算法上的優越性,還存在程序對各種異常情況的識別和處理能力,如果對這些異常沒有得到較好的處理,就非常容易引起程序的奔潰。
那么C++設計了一套異常處理機制,一方面能夠使得異常處理和正常運行代碼進行分離,使得程序更加模塊化;另一方面,C++的異常處理可以不需要異常處理在異常發生時的同一個函數,而是可以在更上層合適的位置進行處理。
下面一起看看C++的異常處理:
2、異常處理語法
C++異常處理涉及到3個關鍵字:
throw---拋出一個異常,帶參數
try---用于標識可能會出現異常的代碼段
catch--是用于標識異常處理的代碼段
下面小哥就一個例子來說明一下他們的使用方法:
#include
using namespace std;
int main(int argc, char** argv) {
try{
cout<<"Run Normal"<throw 2; //拋出異常
cout<<"No arrived"<catch(int a) //異常代碼處理塊
{
cout<<"Error : "<return 0;
}
try所標識的為程序正常運行的代碼段,所以首先打印"Run Normal"字符串,由于遇到了throw拋出此處程序存在異常,程序便會跳出try所標識的代碼段,然后尋找catch所標識的異常處理代碼段,這便會匹配到了正下方的catch輸出"Error : 2”字樣。
3、try-catch注意事項
上面的例子挺簡單的,不過異常處理機制還有很多值得注意的使用方法:
1、當throw拋出異常以后,會以函數調用的方式一層一層的尋找相應的catch,如果當前函數層沒有找到會立馬返回到上層函數進行查找,如果一直沒有找到程序就會停止運行。
下面寫了一個demo驗證一下:
#include
using namespace std;
void FunctionDown(void)
{
cout<<"Run Normal"<throw 2; //拋出異常
cout<<"No arrived"<void FunctionMid(void)
{
FunctionDown();
}
void FunctionUp(void)
{
try
{
FunctionMid();
}
catch(int a) //異常代碼處理塊
{
cout<<"Error : "<int main(int argc, char** argv) {
FunctionUp();
return 0;
}
該程序最后運行的結果與前面的是一致的,這樣函數內部的異常都可以拋出來最后統一處理。
2、同一個try可以帶多個catch用于不同異常的處理。且不同的catch依次匹配異常參數,匹配后便會執行,否則會繼續往上層進行catch匹配。
老規矩,寫個代碼驗證一下:
#include
using namespace std;
void FunctionDown(void)
{
cout<<"Run Normal"<//throw "bug"; //拋出異常
throw (float)3.14; //拋出異常
cout<<"No arrived"<void FunctionMid(void)
{
FunctionDown();
}
void FunctionUp(void)
{
try
{
FunctionMid();
}
catch(int a) //異常代碼處理塊
{
cout<<"Error : "<int main(int argc, char** argv) {
try
{
FunctionUp();
}
catch(float a) //異常代碼處理塊
{
cout<<"Error : "<catch(char const *str) //異常代碼處理塊
{
cout<<"Error : "<return 0;
}
最終由于FunctionMid內的catch的參數無法匹配上,則繼續往上層進行catch匹配,直到匹配到main函數中的catch(float a)才成功。
最 后
好了,這里小哥就簡單介紹了C++異常處理try-catch,本系列文章后續還會更新,記得關注學習哦。
-
函數
+關注
關注
3文章
4346瀏覽量
62971 -
C++
+關注
關注
22文章
2114瀏覽量
73857 -
代碼
+關注
關注
30文章
4825瀏覽量
69049
發布評論請先 登錄
相關推薦
單片機的中斷處理機制
Cortex-M3的異常處理機制分析
![Cortex-M3的<b class='flag-5'>異常</b><b class='flag-5'>處理機制</b>分析](https://file1.elecfans.com//web2/M00/A4/AB/wKgZomUMNTeAUnM7AAAbbCNtALI576.gif)
Java中的異常處理機制
C++程序設計教程之C++工具的詳細資料說明
![<b class='flag-5'>C++</b><b class='flag-5'>程序</b>設計教程之<b class='flag-5'>C++</b>工具的詳細資料說明](https://file.elecfans.com/web1/M00/89/3A/o4YBAFyKGU2ARmALAAKVagtx2S8669.png)
C++的異常機制底層原理與實際應用詳細說明
總結:ARM的異常處理機制分析資料下載
![總結:ARM的<b class='flag-5'>異常</b><b class='flag-5'>處理機制</b>分析資料下載](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
評論