C++ primer 第五章(語句,throw try catch)

break和continue
break語句負責終止離他最近的while,do while,for,switch,並從這些語句之後的第一條語句開始執行。

continue語句終止最近的循環中當前迭代並立即開始下一次迭代,雖然中斷了當前迭代但是循環仍在進行。

try語句塊和異常處理
異常是存在於運行時的反常行爲,這些行爲超出了函數正常功能的範圍。典型的異常包括失去數據庫連接以及遇到意外輸入等。

在C++中異常處理包括:
throw表達式: 異常檢測部分使用throw表達式來表示它遇到了無法處理的問題,引發異常。
try語句塊: 異常處理部分使用try語句塊處理異常,try語句塊以一個或者多個catch子句結束。try語句塊中代碼拋出的異常通常會被某個catch語句處理。
異常類: 用於在throw表達式和相關的catch子句之間傳遞異常的具體信息。
這個感覺不太熟悉,後面還有這一章的知識點再補充

#include<iostream>
#include<stdexcept>
using namespace std;
int main()
{
	int a,b;
	cin>>a>>b;
	try
	{
		if(b==0) throw std::runtime_error("被除數不能爲0");
		cout<<static_cast<double>(a)/b<<endl;
	}
	catch(runtime_error err)
	{
		cout<<err.what()<<"\nTry Again Enter y or n"<<endl;
		char c;
		cin>>c;
		if(!cin||c=='n')
			return 0;
	}
	return 0;
}

當異常被拋出時,首先搜索拋出該異常的函數,如果沒找到匹配的catch子句,終止該函數,並在調用該函數的函數中繼續尋找,以此類推,沿着程序的執行路徑逐層回退,直到找到適合的catch語句,沒找到則轉到名爲terminnate的標準庫函數,程序非正常退出。

c++標準庫定義了一組,用於報告標準庫函數遇到的問題。這些異常類也可以在用戶編寫的程序中使用,它們分別定義在4個頭文件:

  • exception頭文件,定義了最通用的異常類,只報告異常的發生不提供額外的信息
  • stdexcept頭文件定義了幾種最常用的類,如runtime_error
  • new頭文件定義了bad_alloc異常類型
  • type_info頭文件定義了bad_cast異常類型
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章