簡體   English   中英

std::endl 和 '\n' 有什么區別

[英]What's the difference between std::endl and '\n'

我讀過std::endl'\n'之間的區別是std::endl刷新緩沖區而'\n'沒有。 但是,據我所知,linux 上的stdout無論如何都是行緩沖的,這是否意味着std::cout <<... << std::endlstd::cout <<... << '\n'

std::ostream os;

os << std::endl; // more concise

os << '\n' << std::flush; // more explicit about flushing

這兩行具有完全相同的效果。

手動沖洗通常是浪費時間:

  • 如果 output stream 是行緩沖的, std::cout應該是這種情況,如果它連接到交互式終端並且實現可以檢測到它,那么打印\n已經刷新。

  • 如果 output stream 與您之后直接讀取的輸入 stream 配對( std::coutstd::cin配對),則讀取已經刷新。

  • 如果您沒有人等待數據到達目的地,那么刷新又會浪費。

這個std::cout <<... << std::endl和這個std::cout <<... << '\n'不完全一樣。 在最后一個中,換行符\n被流式傳輸到 output。在大多數情況下,這將被控制台解釋為換行符。 但是std::endl意味着(正如你已經提到的)在 output 控制台中完全刷新和換行。

假設您將把它寫在文檔中。 在 Linux 中, \n就足夠了。 但是 Windows 期望\r\n 因此,在 Windows 中使用\n和 Notepad++ 時不會出現新行。

暫無
暫無

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

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