throw 异常信息;异常信息可以是一个变量,也可以是一个表达式,表示要抛出的异常对象。
throw 1; // 抛出一个整数的异常 throw “abced”; // 抛出一个字符串的异常 throw int; // 错误,异常信息不能是类型,必须是具体的值当在代码中检测到一个异常情况(如非法输入、资源耗尽等)时,可以使用 throw 关键字来抛出一个异常。这通常会中断当前函数的执行,并将控制权转交给最近的 catch 块。
#include <iostream> void testFunction(int choice) { if (choice == 1) { throw 42; } else if (choice == 2) { throw "String type exception"; } else { throw 1.23; } } int main() { try { testFunction(2); } catch (int e) { std::cout << "Caught an integer exception: " << e << std::endl; } catch (const char* e) { std::cout << "Caught a string exception: " << e << std::endl; } catch (const double& e) { std::cout << "Caught a standard exception: " << e << std::endl; } return 0; }运行结果为:
Caught a string exception: String type exception
<stdexcept>
头文件中。namespace std { class logic_error; // logic_error: 表示程序逻辑错误的基类。 class domain_error; // 当数学函数的输入参数不在函数的定义域内时抛出。 class invalid_argument; // 当函数的一个参数无效时抛出。 class length_error; //当操作导致容器超过其最大允许大小时抛出。 class out_of_range; // 当数组或其他数据结构访问越界时抛出。 class runtime_error;// 表示运行时错误的基类。 class range_error; // 当数学计算的结果不可表示时抛出。 class overflow_error; // 当算术运算导致溢出时抛出。 class underflow_error; // 当算术运算导致下溢时抛出。 }举个简单的例子:
#include <iostream> #include <stdexcept> void divideNumbers(double num1, double num2) { if (num2 == 0) { throw std::invalid_argument("Denominator cannot be zero"); } std::cout << "Result: " << num1 / num2 << std::endl; } int main() { try { divideNumbers(10, 2); divideNumbers(10, 0); } catch (const std::invalid_argument& e) { std::cerr << "Caught exception: " << e.what() << std::endl; } return 0; }运行结果为:
Result: 5
Caught exception: Denominator cannot be zero
本文链接:http://task.lmcjl.com/news/18921.html