try_catch.cc
来自「模拟嵌入式硬件平台的软件源代码」· CC 代码 · 共 127 行
CC
127 行
// 2002-05-27#include <exception>#include <stdexcept>#include <string>namespace __gnu_test{ enum region { oriental, egyptian, greek, etruscan, roman }; // Test one. class gnu_obj_1 { public: typedef region antiquities; const bool test; const int key1; long key2; antiquities value; gnu_obj_1(antiquities a, long l): test(true), key1(5), key2(l), value(a) {} }; // Test two. template<typename T> class gnu_obj_2: public virtual gnu_obj_1 { public: antiquities value_derived; gnu_obj_2(antiquities b): gnu_obj_1(oriental, 7), value_derived(b) { } }; // Test three. template<typename T> class gnu_obj_3 { public: typedef region antiquities; gnu_obj_2<int> data; gnu_obj_3(antiquities b): data(etruscan) { } }; } int main(){ using namespace __gnu_test; bool test = true; const int i = 5; int j = i; gnu_obj_2<long> test2(roman); gnu_obj_3<long> test3(greek); // 1 try { ++j; throw gnu_obj_1(egyptian, 4589); } catch (gnu_obj_1& obj) { ++j; if (obj.value != egyptian) test &= false; if (obj.key2 != 4589) test &= false; } catch (...) { j = 0; test &= false; } // 2 try { ++j; try { ++j; try { ++j; throw gnu_obj_1(egyptian, 4589); } catch (gnu_obj_1& obj) { ++j; if (obj.value != egyptian) test &= false; if (obj.key2 != 4589) test &= false; } } catch (gnu_obj_1& obj) { ++j; if (obj.value != egyptian) test &= false; if (obj.key2 != 4589) test &= false; } } catch (...) { j = 0; test &= false; } // 3 use standard library using namespace std; try { if (j < 100) throw invalid_argument("gdb.1"); } catch (exception& obj) { if (obj.what() != "gdb.1") test &= false; } return 0;}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?