c++异常处理中的cerr和what()函数是什么

1. cerr

std::cerr 是C++标准库中的标准错误输出流。它是一个预定义的 std::ostream 对象,用于将错误信息输出到标准错误设备。在大多数情况下,标准错误设备通常与控制台窗口或终端相关联,因此错误消息会直接显示在控制台上。(所以我们用cerr的时候,看上去效果和cout一样)

与 std::cout 类似,std::cerr 也是一个输出流对象,你可以使用它的 << 操作符来将数据输出到标准错误流。例如,你可以使用 std::cerr 输出错误信息:

#include <iostream>

int main() {
    int x = 42;
    if (x > 10) {
        std::cerr << "Error: x should be less than or equal to 10." << std::endl;
    }
    return 0;
}

在这个例子中,如果 x 大于10,错误消息将会被输出到标准错误流 std::cerr,而不是标准输出流 std::cout。这是一个惯例,通常用于输出错误和警告信息,因为标准错误流不会被重定向到文件或其他输出目标,它会直接在控制台上显示

2. what() 函数

what()函数的使用可以看上一篇文章的代码,我在这里直接是这个函数的定义含义。

也就是这个函数:

virtual const char* what() const throw()

在C++中,virtual const char* what() const throw() 是一个常见的异常类成员函数的声明,用于提供异常的描述信息。它定义在标准库的 std::exception 类中,是一个纯虚函数。其他的标准异常类通常会继承自 std::exception,并且它们也会实现这个函数来提供描述异常的信息。

这个函数的含义是:

  • virtual: 声明这个函数是虚函数,可以在派生类中被重写。
  • const char* what() const: 这是函数的原型,它返回一个指向常量字符数组(C字符串)的指针,表示异常的描述信息。const 关键字表示这个函数不会修改对象的状态。
  • throw(): 这个部分表示这个函数不会抛出任何异常。在C++03标准中,这个部分被用于声明函数不会抛出任何异常。然而,在C++11及之后的标准中,throw() 被替代为 noexcept 关键字。

具体来说,当你定义一个自定义的异常类时,你通常会从 std::exception 派生,并且你需要实现 what() 函数来提供你的异常的描述信息。例如:

class MyException : public std::exception {
public:
    virtual const char* what() const noexcept override {
        return "My custom exception occurred";
    }
};

在这个例子中,MyException 类继承自 std::exception,并且重写了 what() 函数,提供了异常的描述信息。注意,在C++11及之后的标准中,使用 noexcept 关键字替代了 throw()。

下篇文章会介绍一下c++11新特性:noexcept.

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值