标准IO库定义的其中3个IO对象:
一个istream类型对象:cin
两个ostream对象:cout,cerr
cin:读取标准输入的istream对象,对应于标准输入流(关联到标准输入设备,通常为键盘)。用来读取用户在终端上的输入内容,通过input运算符(>>)将输入内容定向到具有适当类型的对象身上;
cout:写到标准输出的ostream对象,对应于标准输出流(关联到标准输出设备,通常为显示器)。用来将信息写到用户的终端上,output运算符(<<)可以将数据定向到cout
cerr:输出到标准错误的ostream对象,对应于标准错误流(关联到标准输出设备,通常为显示器),常用于显示程序错误信息;
cerr与cout的异同点:
相同点:均可将其输出结果定向到用户的终端,均可将流关联到到标准输出设备(通常为显示器)
差异点:
1、cout经过缓冲后输出。这是一个被缓冲的输出,是标准输出,并且可以重新定向(暂时不理解);
2、cerr对应的标准错误流不经过缓冲而被直接发送给屏幕,而不会等到缓冲区填满或新的换行符,才被显示。一般情况下不被重定向。(暂时不理解)。
为什么有cerr?
比如,你的程序遇到调用栈用完了的威胁(无限,没有出口的递归)。
你说,你到什么地方借内存,存放你的错误信息?所以有了cerr。
其目的,就是在你最需要它的紧急情况下,还能得到输出功能的支持。
缓冲区的目的,就是减少刷屏的次数——比如,你的程序输出圣经中的一篇文章。不带缓冲的话,就会每写一个字母,就输出一个字母,然后刷屏。有了缓冲,你将看到若干句子“同时”就出现在了屏幕上(由内存翻新到显存,然后刷新屏幕)。
参考文章:https://blog.csdn.net/Garfield2005/article/details/7639833