最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2021年09月14日 08:46:50   作者:物隨心轉  
C++ 提供了異常機制,讓我們能夠捕獲運行時錯誤,本文就詳細的介紹了C++異常處理入門,具有一定的參考價值,感興趣的小伙伴們可以參考一下

一、背景

程序運行時常會碰到一些異常情況,例如:

  • 做除法的時候除數為 0;
  • 用 new 運算符動態(tài)分配空間時,空間不夠導致無法分配;
  • 訪問數組元素時,下標越界;打開文件讀取時,文件不存在。

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

二、C++ 異常處理

C++ 引入了異常處理機制。

異常提供了一種轉移程序控制權的方式。C++ 異常處理涉及到三個關鍵字:try、catch、throw。

  • throw: 當問題出現時,程序會拋出一個異常。這是通過使用 throw 關鍵字來完成的。
  • catch: 在您想要處理問題的地方,通過異常處理程序捕獲異常。catch 關鍵字用于捕獲異常。
  • try: try 塊中的代碼標識將被激活的特定異常。它后面通常跟著一個或多個 catch 塊。

舉個例子

#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;
	 }
}

運行結果

也可以自己定義異常類來進行處理:

#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 語句在代碼塊中的任何地方拋出異常。throw 語句的操作數可以是任意的表達式,表達式的結果的類型決定了拋出的異常的類型。

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

#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;
}

運行結果

四、catch(...)的作用

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

void Func()
{
  try
  {
    // 這里的程序代碼完成真正復雜的計算工作,這些代碼在執(zhí)行過程中
    // 有可能拋出DataType1、DataType2和DataType3類型的異常對象。
  }
  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++ 異常處理

總結

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關注腳本之家的更多內容!

相關文章

  • QString使用正則操作的接口實現

    QString使用正則操作的接口實現

    這篇文章主要介紹了QString使用正則操作的接口實現,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-12-12
  • C++中順序表操作的示例代碼

    C++中順序表操作的示例代碼

    這篇文章主要為大家詳細介紹了C++中順序表的基礎操作的相關代碼,主要有順序表的輸出、插入和刪除數據等,感興趣的小伙伴可以了解一下
    2022-10-10
  • C++ abs函數實際應用詳解

    C++ abs函數實際應用詳解

    本文我們來講C++的abs函數以及實戰(zhàn)運用,C++中的abs函數。在C++中使用abs函數要注意存在兩種版本,一種是在stdlmb.h中定義的版本,另一個是在cmath頭文件中定義的。夷實上在stdlib.h文件是C的函數,而cmath中的是C++版本
    2022-08-08
  • C++中求數組長度的方法詳解

    C++中求數組長度的方法詳解

    C++中沒有直接提供求數組長度的方法,提供了sizeof(),begin(),end()等方法,可以供求數組長度使用,文中通過代碼示例給大家講解的非常詳細,具有一定的參考價值,需要的朋友可以參考下
    2023-12-12
  • C語言中儲存類別與內存管理的深入理解

    C語言中儲存類別與內存管理的深入理解

    這篇文章主要給大家介紹了關于C語言中儲存類別與內存管理的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-03-03
  • C++實現猜數游戲

    C++實現猜數游戲

    這篇文章主要為大家詳細介紹了C++實現猜數游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • C語言 指針綜合解析

    C語言 指針綜合解析

    指針可以表示一個變更的地址,在計算機程序中,通常表示內存地址,存儲數據的地址,下面這篇文章主要給大家綜合的介紹了關于C語言指針的本質與用法
    2021-11-11
  • 學習C和C++的9點經驗總結

    學習C和C++的9點經驗總結

    本文給大家總結了一下我們在學習C和C++的時候的一些經驗和需要注意的事項,希望能給大家一些幫助,少走些彎路
    2015-12-12
  • MFC實現在文件尾追加數據的方法

    MFC實現在文件尾追加數據的方法

    這篇文章主要介紹了MFC實現在文件尾追加數據的方法,涉及MFC文件操作的相關技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-09-09
  • C語言實現小貓釣魚游戲

    C語言實現小貓釣魚游戲

    這篇文章主要為大家詳細介紹了C語言實現小貓釣魚游戲,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-01-01

最新評論

太和县| 许昌市| 桑日县| 弥勒县| 曲水县| 平顶山市| 临安市| 双柏县| 习水县| 洱源县| 绍兴市| 莎车县| 祁连县| 富民县| 石柱| 兴城市| 崇州市| 永泰县| 宜丰县| 济源市| 望江县| 保亭| 应城市| 南康市| 义乌市| 新晃| 福州市| 开江县| 柏乡县| 上高县| 大荔县| 阳朔县| 乡城县| 黔西县| 容城县| 乌苏市| 凤凰县| 嘉义市| 洪泽县| 囊谦县| 肇庆市|