cout、cerr、clog
?
其實(shí)大家平常常會(huì)用的主要有三個(gè):cout、cerr、clog,首先簡(jiǎn)單介紹下三者。
這三者在C++中都是標(biāo)準(zhǔn)IO庫(kù)中提供的輸出工具(至于有關(guān)的重載問(wèn)題在此不討論):
cout:寫(xiě)到標(biāo)準(zhǔn)輸出的ostream對(duì)象;
cerr:輸出到標(biāo)準(zhǔn)錯(cuò)誤的ostream對(duì)象,常用于程序錯(cuò)誤信息;
clog:也是輸出標(biāo)準(zhǔn)錯(cuò)誤流(這點(diǎn)兒和cerr是一樣的),貌似平時(shí)很少用到這個(gè)啊;
?
具體在輸出的時(shí)候,三者是有區(qū)別的:
1、cout經(jīng)過(guò)緩沖后輸出,默認(rèn)情況下是顯示器。這是一個(gè)被緩沖的輸出,是標(biāo)準(zhǔn)輸出,并且可以重新定向(關(guān)于重新定向的意思可以參考下面的例子);
2、cerr不經(jīng)過(guò)緩沖而直接輸出,一般用于迅速輸出出錯(cuò)信息,是標(biāo)準(zhǔn)錯(cuò)誤,默認(rèn)情況下被關(guān)聯(lián)到標(biāo)準(zhǔn)輸出流,但它不被緩沖,也就說(shuō)錯(cuò)誤消息可以直接發(fā)送到顯示器,而無(wú)需等到緩沖區(qū)或者新的換行符時(shí),才被顯示。一般情況下不被重定向(重定向這點(diǎn)兒好像有爭(zhēng)論,有些人說(shuō)和系統(tǒng)有關(guān),本人還不太明白)
?
?
對(duì)于為什么有cerr和clog
比如,你的程序遇到調(diào)用棧用完了的威脅(無(wú)限,沒(méi)有出口的遞歸)。
你說(shuō),你到什么地方借內(nèi)存,存放你的錯(cuò)誤信息?
所以有了cerr。其目的,就是在你最需要它的緊急情況下,還能得到輸出功能的支持。
緩沖區(qū)的目的,就是減少刷屏的次數(shù)——比如,你的程序輸出圣經(jīng)中的一篇文章。不帶緩沖的話,就會(huì)每寫(xiě)一個(gè)字母,就輸出一個(gè)字母,然后刷屏。有了緩沖,你將看到若干句子“同時(shí)”就出現(xiàn)在了屏幕上(由內(nèi)存翻新到顯存,然后刷新屏幕)。
?
?
附:
?
#include <iostream>
using namespace std;
int main()
{
cout << "cout" << endl;
cerr << "cerr" << endl;
return 0;
}
運(yùn)行此程序之后,我們?cè)诿钚袌?zhí)行如下命令:
假設(shè)編譯運(yùn)行后的可執(zhí)行文件名為cerr.exe,其目錄為E:\cpro\cerr\Debug\cerr.exe
在命令行下,切換到這個(gè)目錄下,執(zhí)行命令:cerr>test.log
命令行輸出如下:
E:\cpro\cerr\Debug>cerr>>test2.log
Cerr(這是在命令行下輸出的)
查看test2.log文件,發(fā)現(xiàn)里面只有
Cout
一行。
可能這個(gè)就是所謂的重定向輸出。
從這里可以看出:
cout是在終端顯示器輸出,cout流在內(nèi)存中對(duì)應(yīng)開(kāi)辟了一個(gè)緩沖區(qū),用來(lái)存放流中的數(shù)據(jù),當(dāng)向cout流插入一個(gè)endl,不論緩沖區(qū)是否漫了,都立即輸出流中所有數(shù)據(jù),然后插入一個(gè)換行符.?
cerr流對(duì)象是標(biāo)準(zhǔn)錯(cuò)誤流,指定為和顯示器關(guān)聯(lián),和cout作用差不多,有點(diǎn)不同就是cout?
通常是傳到顯示器輸出,但可以被重定向輸出到文件,而cerr流中的信息只能在顯示器輸出.?
clog流也是標(biāo)準(zhǔn)錯(cuò)誤流,作用和cerr一樣,區(qū)別在于cerr不經(jīng)過(guò)緩沖區(qū),直接向顯示器輸出信息,而clog中的信息存放在緩沖區(qū),緩沖區(qū)滿(mǎn)或者遇到endl時(shí)才輸出.
今天看C++Primer(第四版)的時(shí)候又看到了這幾個(gè),摘抄一段話,供大家參考:
"標(biāo)準(zhǔn)庫(kù)定義了4個(gè)IO對(duì)象,處理輸入時(shí)使用命名為cin的istream類(lèi)型對(duì)象,這個(gè)對(duì)象也成為標(biāo)準(zhǔn)輸入。處理輸出時(shí)使用命名為cout的ostream類(lèi)型對(duì)象,這個(gè)對(duì)象也稱(chēng)為標(biāo)準(zhǔn)輸出。標(biāo)準(zhǔn)庫(kù)還定義了另外兩個(gè)ostream對(duì)象,分別命名為cerr和clog。cerr對(duì)象又叫標(biāo)準(zhǔn)錯(cuò)誤,通常用來(lái)輸出警告和錯(cuò)誤信息給程序的使用者,而clog對(duì)象用于產(chǎn)生程序執(zhí)行的一般信息。一般情況下,系統(tǒng)將這些對(duì)象與執(zhí)行窗口聯(lián)系起來(lái),這樣,當(dāng)我們從cin讀入時(shí),數(shù)據(jù)從執(zhí)行程序的窗口讀入,當(dāng)寫(xiě)到cout、cerr、clog時(shí),輸出寫(xiě)至同一窗口。運(yùn)行程序時(shí),大部分操作系統(tǒng)都提供了重定向輸入或者輸出流的方法。利用重定向可以將這些流與所選擇的文件聯(lián)系起來(lái)"
轉(zhuǎn)載于:https://www.cnblogs.com/yzl050819/p/5951612.html
總結(jié)
以上是生活随笔為你收集整理的cout、cerr、clog的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Python3.5 Day1作业:实现用
- 下一篇: 单例、