簡體   English   中英

流緩沖區在C ++中如何工作?

[英]How stream-buffer works in C++?

我正在測試用於流緩沖的C ++代碼。 就我對緩沖思想的理解而言,即使for循環形式存在延遲,以下代碼也應同時打印“ Before loop”和“ After loop”。 問題是它以循環延遲打印它們。 有人可以向我解釋原因嗎? 我將cout作為參數傳遞。

void testBuffer(ostream& os){
    os << "Before loop - ";
       for(int i = 0; i < 2000000000; i++){
         // waste time
       }
    os << "After loop " << endl;

    }

緩沖區不是無限的,在非文件流的情況下,緩沖區甚至可能沒有那么大。

僅僅因為您沒有編寫std::flush並不意味着絕對不會從流中立即得到響應。 如果緩沖區已滿,它將繼續刷新。 只是您並沒有強迫自己提早沖洗。

此外,您可能會想到,在調試模式下, std::cout行為類似於std::cerr (基本上禁用了緩沖)。 我不知道是否有任何實現。

故事的道德啟示:

  • 如果您需要立即輸出,請沖洗;
  • 如果以后需要 ,請稍后再編寫;
  • 且僅當您不關心這兩種方式時,才可以按照自己的方式進行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM