千锋教育-做有情怀、有良心、有品质的职业教育机构

手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

当前位置:首页  >  技术干货  > c++cerr简述与应用

c++cerr简述与应用

来源:千锋教育
发布人:xqq
时间: 2023-11-22 00:06:43 1700582803

一、cerr的定义及特点


#include 
int main()
{
    std::cerr << "This is an error message!" << std::endl;
    return 0;
}

c++中标准库提供了三种标准输出流(cout、cerr、clog),分别用于输出普通信息、错误信息和日志信息。cerr是C++里面标准错误流,它和cout是完全独立的,不受标准输出流的控制。

cerr最主要的作用就是输出错误信息,跟cout非常相似,只是输出通道和输出内容不同。cerr主要有以下特点:

不经过缓冲区,即时输出 不受标准输出流控制 不会被重定向,一般用于输出错误信息到控制台或者日志文件

二、cerr的使用方式

cerr的使用方式和cout非常相似,只是输出通道和输出内容有所不同。下面是一些cerr的使用实例:


#include 
#include 
int main()
{
    std::ofstream log("test.log");
    std::cerr << "This is an error message!" << std::endl;
    log << "This is a log message!" << std::endl;
    return 0;
}

使用cerr输出错误信息,并实时输出到控制台 使用ofstream将日志信息输出到test.log中

三、cerr的应用场景

cerr主要用于输出错误信息,常用于以下场景:

程序发生异常时,输出异常信息 程序调试时,输出变量值或调用栈信息 日志输出时,错误信息需要实时显示到控制台

下面是一个应用场景的例子:


#include 
#include 
#include 
void func()
{
    try
    {
        std::string s("test");
        std::cout << s[10] << std::endl;
    }
    catch(std::exception& e)
    {
        std::cerr << "Exception caught:" << std::endl;
        std::cerr << e.what() << std::endl;
    }
}
int main()
{
    func();
    return 0;
}

上述示例中func()函数里面使用了try-catch语句来捕获s[10]的越界异常,捕获到异常后使用cerr输出异常信息并实时显示在终端。

四、cerr输出到日志文件

cerr除了输出到控制台,还可以将错误信息实时输出到日志文件中。下面是一个实例:


#include 
#include 
int main()
{
    std::ofstream log("test.log");
    std::streambuf *coutbuf = std::cout.rdbuf();
    std::cout.rdbuf(log.rdbuf()); // 将cout的输出重定向到log文件
    std::cerr.rdbuf(log.rdbuf()); // 将cerr的输出重定向到log文件
    std::cout << "This is a normal message." << std::endl;
    std::cerr << "This is an error message." << std::endl;
    return 0;
}

通过重定向cout和cerr输出流,可以将所有输出实时写入日志文件中。在实际应用中,也可以通过增加日志级别来选择输出哪些信息。

五、cerr的使用技巧

在使用cerr的过程中,有一些小技巧可以提高输出信息的质量:

使用cerr输出错误信息前,先使用cout清空缓冲区,确保输出不会混杂 出现错误时,及时输出错误信息和调用堆栈,方便调试 通过日志级别控制输出信息的多少

六、总结

cerr是C++标准库提供的一种标准错误流,主要用于输出错误信息。相比于cout,cerr更适合用于实时输出错误信息。在使用cerr的过程中,需要注意输出内容的格式和输出方式,以提高输出信息的质量。

tags: c++hook
声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。
10年以上业内强师集结,手把手带你蜕变精英
请您保持通讯畅通,专属学习老师24小时内将与您1V1沟通
免费领取
今日已有369人领取成功
刘同学 138****2860 刚刚成功领取
王同学 131****2015 刚刚成功领取
张同学 133****4652 刚刚成功领取
李同学 135****8607 刚刚成功领取
杨同学 132****5667 刚刚成功领取
岳同学 134****6652 刚刚成功领取
梁同学 157****2950 刚刚成功领取
刘同学 189****1015 刚刚成功领取
张同学 155****4678 刚刚成功领取
邹同学 139****2907 刚刚成功领取
董同学 138****2867 刚刚成功领取
周同学 136****3602 刚刚成功领取
相关推荐HOT