C++ cout cerr 和 clog 的區別

來源:互聯網
上載者:User

標籤:

我們都知道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:以上內容來自網路,未得到驗證,僅供學習參考。

C++ cout cerr 和 clog 的區別

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.