// throw 的限制 // 在使用 throw 抛出异常信息时,受到函数声明处的 throw() 声明的 // 可抛出异常类型的限制。 // 如: 函数内可以抛出任何异常 #include using namespace std; class A { public: int n; public: A(int n = 0) : n(n) {} }; // throw() 声明表示不抛出任何异常 // throw(int, char, double, A) 表示可以抛出 int, char, double, A 类型的异常 void show(int x) throw(int, char, double, A) { switch (x) { case 1: throw 0; break; case 2: throw 'a'; break; case 3: throw "abc"; break; case 4: throw 1.25; break; case 5: throw A(100); // 抛出自定义类的对象 break; // default 可以不写,因为前面已经覆盖了所有情况 } cout << "x = " << x << endl; } int main() { cout << "输入一个整数: "; int x; cin >> x; try { show(x); } catch (const int &error) { cout << "捕获异常: " << error << endl; } catch (const char &error) { cout << "捕获异常: " << error << endl; } catch (const char *error) { cout << "捕获异常: " << error << endl; } catch (const double &error) { cout << "捕获异常: " << error << endl; } catch (const A &error) { cout << "捕获异常: " << error.n << endl; } return 0; }