C++中cout标准输出流和cerr标准错误流

在C++中,cout 和 cerr 是两种不同的输出流,它们用于不同的目的。

  • cout 是标准输出流,通常用于输出程序的状态信息、结果等。它是缓冲的,这意味着在达到一定量的数据或者当遇到换行符(例如 endl)时,数据才会被实际写入到输出设备(通常是终端或屏幕)。

  • cerr 是标准错误流,通常用于输出错误信息。它是非缓冲的,这意味着一旦你向 cerr 写入数据,它就会立即被发送到输出设备,而不需要等待缓冲区被填满或遇到换行符。

例:

cout << "hi" << endl;
cout << "hi11";
cerr << "error";

这段代码的输出结果将依赖于多个因素,包括操作系统的缓冲区刷新行为和标准输出与标准错误是否被重定向。以下是可能的情况:

  1. "hi" 后面跟着 endl,这将导致缓冲区被刷新,所以 "hi" 会被立即输出并换行。

  2. "hi11" 被写入 cout,但后面没有 endl 或其他刷新缓冲区的方法,所以这部分输出可能会留在缓冲区中,等待缓冲区被刷新。

  3. "error" 被写入 cerr,因为 cerr 是非缓冲的,所以 "error" 会立即输出。

输出结果如下:

因为 cerr 的输出不会等待 cout 的缓冲区刷新,这里  cout 的缓冲区在程序结束前没有被刷新,所以 "hi11" 不会显示在输出中。要确保 cout 的内容被输出,可以在程序的末尾添加 std::cout.flush(); 或者使用 endl 来刷新缓冲区。

但是,具体的表现可能会因编译器、操作系统和运行环境的不同而有所不同。在某些系统上, "error" 可能会出现在 "hi" 和 "hi11" 之间。

我们在运行结束前添加cout<<endl来刷新缓冲区,则hi11也可以输出

#include <iostream>

using namespace std;
int main()
{
    cout<<"hi"<<endl;
    cout<<"hi11";
    cerr<<"error";
    cout<<endl;
}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值