try 後面的大括弧用來放可能會發生錯誤的程式碼,在會發生錯誤的地方用 throw 丟出例外 (exception) , catch 依據例外的型態 (type) 進行處理。舉例如下
#include <iostream>
int main(void) {
try {
if (5 > 0) {
throw "something wrong...";
}
}
catch (const char* message) {
std::cout << message << std::endl;
}
return 0;
}
/* 《程式語言教學誌》的範例程式
http://pydoing.blogspot.com/
檔名:trydemo01.cpp
功能:示範 C++ 程式
作者:張凱慶
時間:西元 2013 年 1 月 */這裡,如果 5 大於 0 就丟出 "something wrong..." 的例外
if (5 > 0) {
throw "something wrong...";
}對應到 catch 的部份,例外型態就是 const 的字元指標 (pointer)
catch (const char* message) {
std::cout << message << std::endl;
}編譯執行結果如下

例外的型態可以是標準程式庫 (standard library) 中的型態,或是自訂的型態,例如
#include <iostream>
struct BadValue : public std::exception {};
double divide(double a, double b) {
if (b == 0) {
throw BadValue();
}
return a / b;
}
int main(void) {
try {
std::cout << divide(20, 5) << std::endl;
std::cout << divide(20, 4) << std::endl;
std::cout << divide(20, 3) << std::endl;
std::cout << divide(20, 2) << std::endl;
std::cout << divide(20, 1) << std::endl;
std::cout << divide(20, 0) << std::endl;
}
catch (BadValue e) {
std::cout << "something wrong..." << std::endl;
}
return 0;
}
/* 《程式語言教學誌》的範例程式
http://pydoing.blogspot.com/
檔名:trydemo02.cpp
功能:示範 C++ 程式
作者:張凱慶
時間:西元 2013 年 1 月 */這裡的 BadValue 繼承自標準程式庫中的 exception
struct BadValue : public std::exception {};divide() 為可能發生例外的函數 (function) ,在分母 b 為 0 時就拋出例外
double divide(double a, double b) {
if (b == 0) {
throw BadValue();
}
return a / b;
}try 部份的程式碼會逐一執行,碰到發生例外就會跳到 catch 的部份,編譯執行結果如下

| 中英文術語對照 | |
|---|---|
| 例外處理 | exception handling |
| 關鍵字 | keyword |
| 例外 | exception |
| 型態 | type |
| 指標 | pointer |
| 標準程式庫 | standard library |
| 函數 | function |
您可以繼續參考
例外處理
相關目錄
回 C++ 快速導覽
回 C++ 教材
回首頁
參考資料
C++ reference
cplusplus.com
Cprogramming.com C++ Tutorial
C++ Primer, Fourth Edition, Stanley B. Lippman...
沒有留言:
張貼留言