C++/stdexcept
外觀
< C++
stdexcept 是C++標準程式庫中的一個標頭檔,定義了C++標準中的一些表示異常的類 ,這些類都是從std::exception為基礎類別衍生出來的。可分作邏輯錯誤(logic error)與執行時刻錯誤(run-time error)兩個類別。
邏輯錯誤
[編輯]由程式的錯誤引發。這些表示異常的類都是從logic_error基礎類別衍生。包括:
- domain_error:函數的定義域錯誤。這裏是指數學意義上的定義域(domain)[1]。例如,出生月份的值應該是1至12(電腦; 计算机=>zh-mo:電腦內部也可能表示為0-11),如果值為13,則就是domain error。
- invalid_argument:函數的參數的格式錯誤。
- length_error:產生一個包含太長的內容物件。例如,設定一個vector最大長度為10,然後給它添加11個元素。
- out_of_range:常用於C++的陣列、字串、array、vector是否越界存取。
執行時刻錯誤
[編輯]由庫函數或者執行時刻系統(一般指由C++編譯器提供的代碼)。這些表示異常的類都是從runtime_error 基礎類別衍生。包括:
- overflow_error:算術溢位錯誤。
- range_error:用於值域錯誤的錯誤。
- underflow_error:算術下溢位錯誤
例子程式
[編輯]#include <stdexcept>
#include <math.h>
#include <stdio.h>
using namespace std;
float MySqrRoot(float x)
{
// sqrt is not valid for negative numbers.
if (x < 0) throw domain_error("input argument must not be negative.");
return sqrt(x);
}
int main()
{
printf("%f\n",MySqrRoot(4.0));
try{
MySqrRoot(-1.0);
}
catch(domain_error& s){
printf("catch a domain_error---%s\n",s.what());
}
return 0;
}
執行後,輸出結果:
2.000000 catch a domain_error---input argument must not be negative.