C++ cout cerr 和 clog 的区别

我们都知道C++预定义了cin(标准输入流)和cout(标准输出流)。但今天突然又蹦出来两个cerr(标准错误流(非缓冲))和clog(标准错误流(缓冲)),本着学习提高的态度在网上搜索了相关内容,下面是从百度知道获取的内容ps:不知道是不是会侵权呀......

首先通过一个例子就可以分析cout与cerr的区别,将下面代码编译链接后生成test.exe    
1 #include   <iostream.h>
2
3 int   main()
4 {
5      cout   <<   "hello   world---cout"   <<   endl   ;
6      cerr   <<   "hello   world---cerr"   <<   endl   ;
7      return   0;
8 }

在命令行模式下键入下面的命令: test >>cout.txt

  运行结果是:     在生成的cout.txt文件中输出了"hello   world---cout"     同时在显示器上输出了"hello   world---cerr"     也就是说cout的输出可以重定向到一个文件中,而cerr必须输出在显示器上。 

再分析下cerr与clog的区别,两者都是标准错误流, 区别在于cerr不经过缓冲区,直接向显示器输出信息,而clog中的信息存放在缓冲区,缓冲区满或者遇到endl时才输出.  

至于为什么有cerr和clog(我感觉这才是重点),比如,你的程序遇到调用栈用完了的威胁(无限,没有出口的递归),你说,你到什么地方借内存,存放你的错误信息?所以有了cerr。其目的,就是在你最需要它的紧急情况下,还能得到输出功能的支持。缓冲区的目的,就是减少刷屏的次数——比如,你的程序输出圣经中的一篇文章。不带缓冲的话,就会每写一个字母,就输出一个字母,然后刷屏。有了缓冲,你将看到若干句子“同时”就出现在了屏幕上(由内存翻新到显存,然后刷新屏幕)。

pps:以上内容来自网络,未得到验证,仅供学习参考。
时间: 2024-10-13 15:34:34

C++ cout cerr 和 clog 的区别的相关文章

ostream类的3个输出流对象cout,cerr,clog区别和使用

ostream类定义了3个输出流对象:cout,cerr,clog. cerr和clog都是标准错误流,其区别是:cerr不经过缓冲区直接向显示器输出信息:clog中的信息存放在缓冲区,缓冲区满后或遇endl向显示器输出. 例:求解一元二次方程,若公式出错,用cerr流输出有关信息. 解:程序: #include<iostream> #include<cmath> using namespace std; int main() { float a, b, c, disc; cout

【C++】cout、cerr、clog之间的区别

cout.cerr.clog三者都是标准IO库中提供的输出工具. 但是cout是支持重定向操作的.比如freopen()对于cout有效. clog和cerr主要用于错误输出. 因此,如果将程序输出重定向到文件,并且发生了错误,则屏幕上仍然会出现错误消息. 官方说明:https://zh.cppreference.com/w/cpp/io 定义于头文件<iostream>中 cin 从标准 C 输入流 stdin 读取 cout 写入标准 C 输出流 stdout cerr 写入标准 C 错误

cout、cerr、clog

其实大家平常常会用的主要有三个:cout.cerr.clog,首先简单介绍下三者. 这三者在C++中都是标准IO库中提供的输出工具(至于有关的重载问题在此不讨论): cout:写到标准输出的ostream对象: cerr:输出到标准错误的ostream对象,常用于程序错误信息: clog:也是输出标准错误流(这点儿和cerr是一样的),貌似平时很少用到这个啊: 具体在输出的时候,三者是有区别的: 1.cout经过缓冲后输出,默认情况下是显示器.这是一个被缓冲的输出,是标准输出,并且可以重新定向(

cout、cerr、clog有何区别?

windows+vs情况下:在控制台上,cout能重定向到文件,cerr和clog不能.输出重定向到文件实际上就是一个管道的一头连输出流,另一头连文件输入流 cout具有自己的缓冲区,当缓冲区满或遇到endl会刷新终端(默认是屏幕):cerr没有缓冲区,直接刷新终端 cout的写缓存操作和系统刷新终端的操作是异步的,所以会存在当程序崩溃的情况下按代码执行顺序应该输出的内容可能只输出了一部分,而不是全部输出,因为这个时候程序已经崩溃了 cout.printf其实是写缓存.这就存在一个问题,当缓冲区

C++程序设计POJ》《WEEK7 输入输出和模板》

输入输出相关的类 与输入输出流操作相关的类 ios 基类 istream是用于输入的流类, cin 就是该类的对象. ostream是用于输出的流类, cout 就是该类的对象. ifstream是用于从文件读取数据的类. ofstream是用于向文件写入数据的类. iostream是既能用于输入,又能用于输出的类. fstream是既能从文件读取数据,又能向文件写入数据的类. 标准流对象?输入流对象 : cin 与标准输入设备相连?输出流对象: cout 与标准输出设备相连cerr与标准错误输

(原创)c++primer(第五版)--1.2 初始输入和输出

c++语言并未定义任何的输入输出(IO)语句,取而代之,包含了一个全面的标准库(standard library)来提供IO机制. 本书中的很多示例都使用了iostream库.iostream库包含两个基本类型 istream 和 ostream,分别表示输入流和输出流.一个流就是一个字符序列,是从IO设备读出或写入IO设备的.术语“流”(stream)想要表达的是,随着时间的推移,字符是顺序生存或消耗的. 标准输入输出对象 1. cin(发音为see-in):标准输入:istream类型的对象

读书笔记 effective c++ Item 54 让你自己熟悉包括TR1在内的标准库

1. C++0x的历史渊源 C++标准——也就是定义语言的文档和程序库——在1998被批准.在2003年,一个小的“修复bug”版本被发布.然而标准委员会仍然在继续他们的工作,一个“2.0版本”的C++标准预计在2009年被发布(虽然所有的工作很有可能在2007年底被完成).直到现在,发布下一版C++的预计年份还没有被确定,这就解释了为什么人们把下一版C++叫做“C++0x”——C++的200x年版本. C++0x可能会包含一些有趣的新的语言特性,但是大多数新C++功能将会以标准库附加物的形式被

九、杂项讨论

条款53:不要轻忽编译器的警告 编译器的作者对一些接下来可能发生的错误的理解一定胜过我们这些普通程序员,如果编译器发出警告,就表明可能存在某种情况会造成一些错误,而这些错误你可能都没想到过.所以我们不要忽略编译器的警告! class Base { public: virtual void f() const; }; class Derive { public: virtual void f(); }; 这一段编译后,编译器会发出警告: warning:D::f() hides virtual B

java 标准输出与标准错误 out与 err 区别 用法 联系 java中的out与err区别 System.out和System.err的区别 System.out.println和System.err.println的区别 Java重定向System.out和System.err

操作系统一般都有三个标准文件描述符:标准输入,标准输出,标准出错 这是操作系统的一种抽象表达 不同的语言需要有不同的具体表达方式,当然也不过是另一种包装抽象 比如c++的  cin cout cerr Java中则是的System.in,System.out,System.err 示例 输出结果: ---------------- ---------------- 可以看得出来: 运行多次  err的打印信息位置是不固定的 看下JDK文档:   /** * The "standard"