首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> C++ 基礎

C++ 標準輸出流 cout/cerr/clog 深度解析:三大輸出通道的分工與協作

     編輯:C++ 基礎

cout:標準輸出流

  • 關聯標準輸出裝置 (螢幕)
  • 緩衝機制:資料先入 輸出緩衝區,滿或遇 endl 才刷新顯示
  • endl = 換行 + 強制刷新;\n = 僅換行 (不一定刷新)
  • 可重導向至檔案:./prog > out.txt
  • 自動型別識別:cout << val 依 val 型別調用對應重載

cerr:標準錯誤流 (無緩衝)

  • 同關聯螢幕,但不經緩衝區,直接輸出
  • 專用於錯誤/診斷訊息,確保即時顯示
  • 不可重導向 (或難以重導向),保證錯誤不被吞沒
  • 用法同 cout:cerr << "Error!" << endl;

clog:標準日誌流 (有緩衝)

  • 同關聯螢幕,經緩衝區,滿或遇 endl 刷新
  • 用於非關鍵日誌/除錯資訊,效能優於 cerr
  • 可重導向

實戰範例:二次方程式求根與錯誤分流

float a, b, c, disc;
cout << "please input a,b,c: ";
cin >> a >> b >> c;

if (a == 0)
    cerr << "a is zero, error!" << endl;           // 即時顯示錯誤
else if ((disc = b*b - 4*a*c) < 0)
    cerr << "disc < 0, no real root" << endl;      // 即時顯示錯誤
else {
    cout << "x1=" << (-b + sqrt(disc))/(2*a) << endl;
    cout << "x2=" << (-b - sqrt(disc))/(2*a) << endl;
}

執行 ./prog > result.txt 時,正常根輸出進檔案,錯誤訊息仍顯示螢幕——關鍵分離。

三流對比總結

流用途緩衝可重導向典型場景
cout正常結果是是報表、資料輸出
cerr錯誤/警告否否即時錯誤通知
clog日誌/除錯是是大量除錯資訊

總結

善用三大輸出通道分工:cout 輸出業務結果、cerr 即時曝光錯誤、clog 記錄除錯軌跡。配合 Shell 重導向,實現「正常輸出入檔、錯誤上螢幕」的生產級輸出架構。

  1. 上一篇文章:
  2. 下一篇文章:
  • --热点文章
  • Copyright © 程式碼之家 All Rights Reserved