久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

一篇文章帶你入門C++的異常處理

C++ 提供了異常機(jī)制,讓我們能夠捕獲運(yùn)行時(shí)錯(cuò)誤,本文就詳細(xì)的介紹了C++異常處理入門,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

一、背景

程序運(yùn)行時(shí)常會(huì)碰到一些異常情況,例如:

  • 做除法的時(shí)候除數(shù)為 0;
  • 用 new 運(yùn)算符動(dòng)態(tài)分配空間時(shí),空間不夠?qū)е聼o(wú)法分配;
  • 訪問(wèn)數(shù)組元素時(shí),下標(biāo)越界;打開(kāi)文件讀取時(shí),文件不存在。

這些異常情況,如果不能發(fā)現(xiàn)并加以處理,很可能會(huì)導(dǎo)致程序崩潰。
所謂“處理”,可以是給出錯(cuò)誤提示信息,然后讓程序沿一條不會(huì)出錯(cuò)的路徑繼續(xù)執(zhí)行;也可能是不得不結(jié)束程序,但在結(jié)束前做一些必要的工作,如將內(nèi)存中的數(shù)據(jù)寫入文件、關(guān)閉打開(kāi)的文件、釋放動(dòng)態(tài)分配的內(nèi)存空間等。

二、C++ 異常處理

C++ 引入了異常處理機(jī)制。

異常提供了一種轉(zhuǎn)移程序控制權(quán)的方式。C++ 異常處理涉及到三個(gè)關(guān)鍵字:try、catch、throw

  • throw: 當(dāng)問(wèn)題出現(xiàn)時(shí),程序會(huì)拋出一個(gè)異常。這是通過(guò)使用 throw 關(guān)鍵字來(lái)完成的。
  • catch: 在您想要處理問(wèn)題的地方,通過(guò)異常處理程序捕獲異常。catch 關(guān)鍵字用于捕獲異常。
  • try: try 塊中的代碼標(biāo)識(shí)將被激活的特定異常。它后面通常跟著一個(gè)或多個(gè) catch 塊。

舉個(gè)例子


#include <iostream>  
#include <exception>  
using namespace std;  
int main () {  
   try
	 {
		 throw 1;
		 throw "error";
	 }
	 catch (const char* str)
	 {
		 cout << str << endl;
	 }
	 catch (int i)
	 {
		 cout << i << endl;
	 }
}

運(yùn)行結(jié)果

也可以自己定義異常類來(lái)進(jìn)行處理:


#include <iostream>
#include <exception>
using namespace std;
//可以自己定義Exception
class myexception: public exception
{
	virtual const char* what() const throw()
	{
		return "My exception happened";
	}
}myex;
int main () {
	try
	{    
		if(true)    //如果,則拋出異常;
			throw myex;
	}
	catch (exception& e)
	{
		cout << e.what() << endl;
	}
	return 0;
}

三、拋出異常與捕獲異常

可以使用 throw 語(yǔ)句在代碼塊中的任何地方拋出異常。throw 語(yǔ)句的操作數(shù)可以是任意的表達(dá)式,表達(dá)式的結(jié)果的類型決定了拋出的異常的類型。

以下是嘗試除以零時(shí)拋出異常的實(shí)例:


#include <iostream>
using namespace std;
double division(int a, int b)
{
   if( b == 0 )
   {
      throw "Division by zero condition!";
   }
   return (a/b);
}
int main ()
{
   int x = 50;
   int y = 0;
   double z = 0;
   try {
     z = division(x, y);
     cout << z << endl;
   }catch (const char* msg) {
     cerr << msg << endl;
   }
   return 0;
}

運(yùn)行結(jié)果

四、catch(...)的作用

  catch(…)能夠捕獲多種數(shù)據(jù)類型的異常對(duì)象,所以它提供給程序員一種對(duì)異常對(duì)象更好的控制手段,使開(kāi)發(fā)的軟件系統(tǒng)有很好的可靠性。因此一個(gè)比較有經(jīng)驗(yàn)的程序員通常會(huì)這樣組織編寫它的代碼模塊,如下:


void Func()
{
  try
  {
    // 這里的程序代碼完成真正復(fù)雜的計(jì)算工作,這些代碼在執(zhí)行過(guò)程中
    // 有可能拋出DataType1、DataType2和DataType3類型的異常對(duì)象。
  }
  catch(DataType1& d1)
  {
  }
  catch(DataType2& d2)
  {
  }
  catch(DataType3& d3)
  {
  }
  catch(…)
  {
  }
}

例子


 double division(int a, int b)
 {
	 if (b == 0) {
		 throw "Division by zero condition!";
	 }
	 return (a / b);
 }
 int main() {
	 try
	 {
		 int res = division(10,0);
	 }
	 catch (...)
	 {
		 cout << " * ********" << endl;
	 }
     return 0;
}

參考:

C++異常處理(try catch throw)完全攻略

c++中try catch的用法

C++ 異常處理

總結(jié)

本篇文章就到這里了,希望能夠給你帶來(lái)幫助,也希望您能夠多多關(guān)注html5模板網(wǎng)的更多內(nèi)容!

【網(wǎng)站聲明】本站部分內(nèi)容來(lái)源于互聯(lián)網(wǎng),旨在幫助大家更快的解決問(wèn)題,如果有圖片或者內(nèi)容侵犯了您的權(quán)益,請(qǐng)聯(lián)系我們刪除處理,感謝您的支持!

相關(guān)文檔推薦

主站蜘蛛池模板: 国产精品1区 | 国产精品精品视频 | 国产清纯白嫩初高生视频在线观看 | 日本精品网站 | 国产色婷婷精品综合在线手机播放 | 黄a免费看 | 亚洲精品免费观看 | 日本又色又爽又黄的大片 | 国产成人福利 | 日韩国产免费观看 | 国产丝袜一区二区三区免费视频 | 99久久婷婷| 国产精品久久久久久久久久 | 久久亚洲一区二区三 | 欧美精产国品一二三区 | 亚洲免费福利视频 | 久久久www成人免费精品 | 久久69精品久久久久久久电影好 | 国产福利资源在线 | 蜜桃av人人夜夜澡人人爽 | 69电影网| 91精品国产91综合久久蜜臀 | 亚洲午夜精品一区二区三区他趣 | 久久久久久黄 | 国产一区二区自拍 | 亚洲欧洲视频 | 午夜免费视频 | 精品伊人久久 | 一区二区三区中文 | 中文字幕av色 | 中文字幕精品视频在线观看 | 91精品久久久久久久久 | 精品国产一区二区三区日日嗨 | 中文一级片 | 欧美美女爱爱 | 91网站视频在线观看 | 亚洲一页 | 一级久久久久久 | 久久久精彩视频 | 久久高清 | 国产成人福利 |