国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【C++】異常處理 ① ( 異常概念引入 | 拋出異常語(yǔ)法 | 捕獲異常語(yǔ)法 | 異常捕獲流程 | 異常處理代碼示例 )

這篇具有很好參考價(jià)值的文章主要介紹了【C++】異常處理 ① ( 異常概念引入 | 拋出異常語(yǔ)法 | 捕獲異常語(yǔ)法 | 異常捕獲流程 | 異常處理代碼示例 )。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。





一、異常處理




1、異常概念引入


異常是一種 特殊的程序流控制機(jī)制 , 用于處理程序中可能出現(xiàn)的錯(cuò)誤或異常情況 ;

當(dāng)程序執(zhí)行錯(cuò)誤時(shí) , 由 throw 關(guān)鍵字拋出異常 , 并即跳轉(zhuǎn)到相應(yīng)的異常處理程序中 ; 如果沒(méi)有適當(dāng)?shù)漠惓L幚沓绦蛱幚碓摦惓?, 程序會(huì)崩潰終止 ;


異常與函數(shù)對(duì)比 :

  • 函數(shù) 是一種 以 棧結(jié)構(gòu) 展開(kāi)的上下函數(shù)銜接的程序控制系統(tǒng) ;
  • 異常 是一種 特殊的程序流控制機(jī)制 , 用于處理程序中可能出現(xiàn)的錯(cuò)誤或異常情況 ; 異常 依附于棧結(jié)構(gòu) , 卻可以同時(shí)設(shè)置多個(gè) 異常類型 作為 異常捕獲條件 ;

異常是跨函數(shù)的 , 下圖中 函數(shù) f 調(diào)用 函數(shù) g , 函數(shù) g 調(diào)用 函數(shù) h ;
【C++】異常處理 ① ( 異常概念引入 | 拋出異常語(yǔ)法 | 捕獲異常語(yǔ)法 | 異常捕獲流程 | 異常處理代碼示例 ),C++,c++,異常處理,try,異常捕獲,拋出異常
在 函數(shù) h 中拋出異常 , 異常會(huì)沿著函數(shù) 調(diào)用順序 , 先拋給 函數(shù) g , 如果 g 不處理 , 則繼續(xù)向上拋給 函數(shù) f ;

上述 異常處理 機(jī)制 , 可以在不同的函數(shù)中 進(jìn)行 拋出異常 和 處理異常 的操作 ;

這樣 函數(shù)設(shè)計(jì)開(kāi)發(fā)時(shí) 只需要解決具體的問(wèn)題 , 不需要過(guò)多考慮 異常處理 ;


2、拋出異常語(yǔ)法


拋出異常 語(yǔ)法 : 使用 throw 關(guān)鍵字 , 拋出異常對(duì)象 ;

throw 異常對(duì)象;

代碼示例 : 在下面的函數(shù)中 , 拋出一個(gè) int 類型的異常 ;

// 1. 在 函數(shù) 中 拋出異常
void fun(int a) {
	if (a == 0) {
		// 拋出一個(gè) int 類型的異常
		throw 2;
	}
}

3、捕獲異常語(yǔ)法


異常捕獲 語(yǔ)法 : 在 try 代碼塊中執(zhí)行 可能拋出異常的 代碼 , 如果出現(xiàn)異常 , 就可以在 catch 分支中進(jìn)行捕獲 ;

try {
	// 出現(xiàn)異常的代碼塊
} catch( 異常類型聲明 )

代碼示例 : 下面的代碼中 , 捕獲 try 代碼塊中產(chǎn)生的異常 ,

  • 如果捕獲到 int 類型的異常 , 則執(zhí)行 catch (int e) 分支中的代碼 ,
  • 如果捕獲到其它類型的異常 , 則執(zhí)行 catch ( … ) 分支中的代碼 ;
	// 2. 捕獲并處理異常
	try
	{
		// 調(diào)用可能產(chǎn)生異常的函數(shù)
		fun(0);
	}
	catch (int e)
	{
		cout << "捕獲到異常 : " << e << endl;
	}
	catch ( ... )
	{
		// 捕獲 ... 可以捕獲未知其它類型的異常
		cout << "捕獲到未知類型異常"<< endl;
	}

4、異常捕獲流程


異常捕獲流程 :

  • 拋出異常 : 如果遇到錯(cuò)誤 , 需要拋出異常 , 可以使用 throw 關(guān)鍵字 , 拋出一個(gè)異常對(duì)象 , 這個(gè)異常對(duì)象可以是任意類型 , 如 int 類型 ;
  • try 代碼塊處理異常 : 在 try 代碼塊中 , 執(zhí)行可能拋出異常的代碼 , 上方的代碼順序執(zhí)行到達(dá) try 代碼塊時(shí) , 則進(jìn)入 try 代碼塊 繼續(xù)執(zhí)行其中的代碼 ;
    • 正常執(zhí)行 : 如果 try 保護(hù)段代碼正常執(zhí)行 , 沒(méi)有出現(xiàn)異常 , 則執(zhí)行完畢后繼續(xù)執(zhí)行 后續(xù)代碼 , 最后一個(gè) catch 分支之后的代碼 ;
    • 出現(xiàn)異常 :
      • 捕獲異常 : 如果出現(xiàn)了異常 , 恰好被 catch 分支捕獲 , 則執(zhí)行 catch 分支代碼 ;
        • 處理異常 : 如果能處理該異常 , 則處理異常錯(cuò)誤 ;
        • 繼續(xù)向上拋出異常 : 如果無(wú)法處理 , 則繼續(xù)向上拋出給調(diào)用者 , 讓上一級(jí)函數(shù)處理 ;
      • 未捕獲異常 : 如果出現(xiàn)了異常 , 沒(méi)有被 catch 分支捕獲 , 則運(yùn)行 terminate 函數(shù) , 在該函數(shù)中調(diào)用 abort 終止程序 ;




二、異常處理代碼示例




1、錯(cuò)誤代碼示例 - 拋出異常 / 不捕獲異常


錯(cuò)誤代碼示例 : 在下面的代碼中 , 沒(méi)有捕獲異常 , 則在執(zhí)行時(shí)會(huì)報(bào)錯(cuò) : " 0x755FF932 處(位于 HelloWorld.exe 中)有未經(jīng)處理的異常 " ;

#include "iostream"
using namespace std;

// 1. 在 函數(shù) 中 拋出異常
void fun(int a) {
	if (a == 0) {
		// 拋出一個(gè) int 類型的異常
		throw 2;
	}
}

int main() {

	// 調(diào)用可能產(chǎn)生異常的函數(shù)
	fun(0);

	// 控制臺(tái)暫停 , 按任意鍵繼續(xù)向后執(zhí)行
	system("pause");

	return 0;
};

執(zhí)行結(jié)果 :

0x755FF932(位于 HelloWorld.exe 中)有未經(jīng)處理的異常: 
Microsoft C++ 異常: int,位于內(nèi)存位置 0x00F6FB6C 處。 

【C++】異常處理 ① ( 異常概念引入 | 拋出異常語(yǔ)法 | 捕獲異常語(yǔ)法 | 異常捕獲流程 | 異常處理代碼示例 ),C++,c++,異常處理,try,異常捕獲,拋出異常


2、正確代碼示例 - 拋出異常 / 捕獲異常


異常捕獲完整代碼示例 :

#include "iostream"
using namespace std;

// 1. 在 函數(shù) 中 拋出異常
void fun(int a) {
	if (a == 0) {
		// 拋出一個(gè) int 類型的異常
		throw 2;
	}
}

int main() {

	// 2. 捕獲并處理異常
	try
	{
		// 調(diào)用可能產(chǎn)生異常的函數(shù)
		fun(0);
	}
	catch (int e)
	{
		cout << "捕獲到異常 : " << e << endl;
	}
	catch ( ... )
	{
		// 捕獲 ... 可以捕獲未知其它類型的異常
		cout << "捕獲到未知類型異常"<< endl;
	}

	// 控制臺(tái)暫停 , 按任意鍵繼續(xù)向后執(zhí)行
	system("pause");

	return 0;
};

執(zhí)行結(jié)果 :

捕獲到異常 : 2
請(qǐng)按任意鍵繼續(xù). . .

【C++】異常處理 ① ( 異常概念引入 | 拋出異常語(yǔ)法 | 捕獲異常語(yǔ)法 | 異常捕獲流程 | 異常處理代碼示例 ),C++,c++,異常處理,try,異常捕獲,拋出異常


3、正確代碼示例 - 拋出異常 / 捕獲異常不處理繼續(xù)拋出異常


異常是跨函數(shù)的 , 異常會(huì)從本函數(shù)中拋給調(diào)用本函數(shù)的調(diào)用者 ( 調(diào)用函數(shù) ) ;

  • 如 : 在 main 函數(shù)中調(diào)用 fun 函數(shù) , 如果 fun 函數(shù)中拋出異常 , 則拋給了 main 函數(shù) , 需要在 main 函數(shù)中捕獲并處理異常 ;

在下面的示例中 , fun2 函數(shù)中捕獲 fun 函數(shù)中的 異常未處理 , 拋到了 main 函數(shù)中 ;

main 函數(shù)中的異常必須處理 , 否則程序崩潰 ;


代碼示例 :

#include "iostream"
using namespace std;

// 1. 在 函數(shù) 中 拋出異常
void fun(int a) {
	if (a == 0) {
		// 拋出一個(gè) int 類型的異常
		throw 2;
	}
}

// 3. 捕獲異常不處理 , 繼續(xù)向上拋出
void fun2(int a) {

	try
	{
		// 執(zhí)行可能拋出異常的函數(shù)
		fun(a);
	}
	catch (int e)
	{
		// 捕獲到了異常, 但是不處理繼續(xù)向上拋出
		throw;
	}

}

int main() {

	// 2. 捕獲并處理異常
	try
	{
		// 調(diào)用可能產(chǎn)生異常的函數(shù)
		//fun(0);

		// 異常是跨函數(shù)的
		// 調(diào)用可能產(chǎn)生異常的函數(shù)
		// 該 fun2 函數(shù)中捕獲 fun 函數(shù)中的 異常未處理 
		// 拋到了 main 函數(shù)中
		fun2(0);
	}
	catch (int e)
	{
		cout << "捕獲到異常 : " << e << endl;
	}
	catch ( ... )
	{
		// 捕獲 ... 可以捕獲未知其它類型的異常
		cout << "捕獲到未知類型異常"<< endl;
	}

	// 控制臺(tái)暫停 , 按任意鍵繼續(xù)向后執(zhí)行
	system("pause");

	return 0;
};

執(zhí)行結(jié)果 :

捕獲到異常 : 2
請(qǐng)按任意鍵繼續(xù). . .

【C++】異常處理 ① ( 異常概念引入 | 拋出異常語(yǔ)法 | 捕獲異常語(yǔ)法 | 異常捕獲流程 | 異常處理代碼示例 ),C++,c++,異常處理,try,異常捕獲,拋出異常文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-757123.html

到了這里,關(guān)于【C++】異常處理 ① ( 異常概念引入 | 拋出異常語(yǔ)法 | 捕獲異常語(yǔ)法 | 異常捕獲流程 | 異常處理代碼示例 )的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Java 異常處理以及如何捕獲和處理多個(gè)異常

    Java 異常處理以及如何捕獲和處理多個(gè)異常

    在Java中,我們使用異常處理程序組件try,catch和finally塊來(lái)處理異常。 為了捕獲和處理異常,我們將try...catch...finally代碼塊放置在可能產(chǎn)生異常的代碼周圍。finally塊是可選的。 try...catch...finally的語(yǔ)法為: 可能會(huì)生成異常的代碼放在try塊中。 每個(gè)try塊后面應(yīng)緊跟著catch 或 fi

    2024年02月14日
    瀏覽(44)
  • java異常處理機(jī)制(二)之異常處理與捕獲

    java異常處理機(jī)制(二)之異常處理與捕獲

    1 Error(錯(cuò)誤): 是指程序無(wú)法處理的錯(cuò)誤,表示運(yùn)行應(yīng)用程序時(shí)比較嚴(yán)重的問(wèn)題。大多數(shù)錯(cuò)誤與代碼編寫者執(zhí)行的操作無(wú)關(guān),而表示代碼運(yùn)行時(shí)JVM(Java 虛擬機(jī))出現(xiàn)的問(wèn)題。 2 異常(Exception): 是指在程序執(zhí)行時(shí)由于程序處理邏輯上的錯(cuò)誤而導(dǎo)致程序中斷的一種指令流。通俗的

    2024年02月05日
    瀏覽(21)
  • 爬蟲(chóng)異常處理:異常捕獲與容錯(cuò)機(jī)制設(shè)計(jì)

    爬蟲(chóng)異常處理:異常捕獲與容錯(cuò)機(jī)制設(shè)計(jì)

    作為一名專業(yè)的爬蟲(chóng)程序員,每天使用爬蟲(chóng)IP面對(duì)各種異常情況是我們每天都會(huì)遇到的事情。 在爬取數(shù)據(jù)的過(guò)程中,我們經(jīng)常會(huì)遇到網(wǎng)絡(luò)錯(cuò)誤、頁(yè)面結(jié)構(gòu)變化、被反爬蟲(chóng)機(jī)制攔截等問(wèn)題。在這篇文章中,我將和大家分享一些關(guān)于如何處理爬蟲(chóng)異常情況的經(jīng)驗(yàn)和技巧。通過(guò)異常

    2024年02月11日
    瀏覽(17)
  • 解決攔截器拋出異常處理類的500狀態(tài)碼Html默認(rèn)格式響應(yīng) !

    解決方式 將Java對(duì)象轉(zhuǎn)換為JSON格式的響應(yīng),使用spring-mvc.xml配置適當(dāng)?shù)南⑥D(zhuǎn)換器。 問(wèn)題出處的相關(guān)類如下 interceptor如下 ?自定義異常類 ?異常處理類

    2024年02月09日
    瀏覽(22)
  • Python 異常捕獲與處理

    當(dāng)我們寫程序難免遇到報(bào)錯(cuò),專業(yè)的稱呼叫做異常,行業(yè)俗語(yǔ)叫做bug,由于異常情況出現(xiàn)會(huì)導(dǎo)致代碼停止運(yùn)行,所以在編寫過(guò)程中要盡可能避免。 語(yǔ)法錯(cuò)誤 這一類錯(cuò)誤很好理解,相當(dāng)于你不會(huì)寫,比如用if或for的時(shí)候不知道他們?cè)趺磳?,這種情況比較夸張了,好好學(xué)過(guò)的人都

    2023年04月22日
    瀏覽(24)
  • 爬蟲(chóng)異常捕獲與處理方法詳解

    爬蟲(chóng)異常捕獲與處理方法詳解

    Hey!作為一名專業(yè)的爬蟲(chóng)代理供應(yīng)商,我今天要和大家分享一些關(guān)于爬蟲(chóng)異常捕獲與處理的方法。在進(jìn)行爬蟲(chóng)操作時(shí),我們經(jīng)常會(huì)遇到各種異常情況,例如網(wǎng)絡(luò)連接錯(cuò)誤、請(qǐng)求超時(shí)、數(shù)據(jù)解析錯(cuò)誤等等。這些異常情況可能會(huì)導(dǎo)致程序崩潰或數(shù)據(jù)丟失,因此,我們需要學(xué)會(huì)如何

    2024年02月11日
    瀏覽(22)
  • c++捕獲異常

    catch ?塊跟在? try ?塊后面,用于捕獲異常。您可以指定想要捕捉的異常類型,這是由 catch 后的括號(hào)內(nèi)的異常聲明決定的。 try { // 保護(hù)代碼 }catch( ExceptionName e ) { // 處理 ExceptionName 異常的代碼 } 上面的代碼會(huì)捕獲一個(gè)類型為? ExceptionName ?的異常。如果您想讓 catch 塊能

    2024年02月09日
    瀏覽(22)
  • Python十類常見(jiàn)異常類型(附捕獲以及異常處理方式)

    Python十類常見(jiàn)異常類型(附捕獲以及異常處理方式)

    大家好,我是辣條哥!今天給大家講講我們剛開(kāi)始寫代碼是都會(huì)出現(xiàn)的問(wèn)題-我們剛開(kāi)始常見(jiàn)的異常以及處理方法! 異常是指在程序運(yùn)行過(guò)程中出現(xiàn)的錯(cuò)誤或異常情況,例如除以0、訪問(wèn)不存在的變量等。Python提供了一些內(nèi)置的異常類型,同時(shí)也支持自定義異常類型。 想找辣條

    2024年02月08日
    瀏覽(20)
  • php捕獲Fatal error錯(cuò)誤與異常處理

    在php5的版本中,如果出現(xiàn)致命錯(cuò)誤是無(wú)法被 try {} catch 捕獲的,如下所示: 運(yùn)行腳本,最終php報(bào)出一個(gè)Fatal error,并程序中止 有些時(shí)候,我們需要捕獲這種錯(cuò)誤,并做相應(yīng)的處理。 那就需要用到?register_shutdown_function() 和?error_get_last() 來(lái)捕獲錯(cuò)誤 對(duì)于php7中的錯(cuò)誤捕獲,因?yàn)?/p>

    2024年02月19日
    瀏覽(23)
  • 【小沐學(xué)C++】C++ 捕獲程序異常奔潰minidump

    【小沐學(xué)C++】C++ 捕獲程序異常奔潰minidump

    并不是所有的bug都可以在發(fā)布前找到,也就是說(shuō)并不是所有的拋出異常的bug都可以在發(fā)布前找到。幸運(yùn)的是,微軟在 Platform SDK 中包含了一個(gè)功能,可以幫助開(kāi)發(fā)人員收集用戶發(fā)現(xiàn)的異常信息。MiniDumpWriteDump函數(shù)將必要的故障轉(zhuǎn)儲(chǔ)信息寫入文件,而不節(jié)省整個(gè)進(jìn)程空間。此故障

    2024年02月06日
    瀏覽(16)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包