详细介绍一下stdexcept

<stdexcept>头文件是 C++ 标准库中的一个头文件,它定义了一些标准异常类,这些异常类通常被用于表示 C++ 程序在运行时的错误。<stdexcept>中定义的异常类都是从std::exception类派生而来的,因此<stdexcept>中定义的异常类都有一个通用的成员函数what(),用于返回一个描述异常原因的 C 风格字符串。

下面是<stdexcept>中定义的一些常用异常类:

  • std::logic_error:表示程序逻辑错误,例如在程序逻辑上讲,调用了一个非法的函数,常见的子类包括std::invalid_argumentstd::domain_errorstd::length_error等;

  • std::runtime_error:表示运行时错误,例如访问了一个无效的地址,常见的子类包括std::range_errorstd::overflow_error等;

  • std::bad_alloc:表示内存分配失败,例如使用new运算符分配内存时,没有足够的内存可供分配;

  • std::bad_cast:表示类型转换失败,例如在dynamic_cast操作中类型不匹配;

  • std::bad_exception:表示未捕获的异常,例如在throw语句中抛出了一个未定义异常。

这些异常类都是 C++ 标准库中预定义的类,使用时只需包含<stdexcept>头文件,并从类中选择相应的异常类或者根据需求自定义异常类来使用即可。通过使用这些异常类,我们可以使代码更具表现力和准确性,以更容易地识别和处理可能出现的异常情况。

下面示范一个程序,程序的目的是从用户输入中读取两个整数,并计算它们的商。当除数为0时,我们抛出一个std::runtime_error异常。代码如下:

#include <iostream>
#include <stdexcept>
​
int main() {
    int a, b;
    std::cout << "Please input two integers: " << std::endl;
    std::cin >> a >> b;
    try {
        if (b == 0) {
            throw std::runtime_error("Divisor cannot be 0.");
        } else {
            std::cout << "Result: " << a / b << std::endl;
        }
    } catch (std::runtime_error& e) {
        std::cerr << "Error: " << e.what() << std::endl;
    }
    return 0;
}

运行程序并输入一个除数为0的值,可以观察到程序抛出了一个std::runtime_error异常并输出了异常信息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值