亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

C+:“STD:Endl”vs“\n”

C+:“STD:Endl”vs“\n”

C++ C
臨摹微笑 2019-05-31 13:36:27
C+:“STD:Endl”vs“\n”許多C+書籍都包含這樣的示例代碼.。std::cout << "Test line" << std::endl;.所以我也一直這么做但是,我看到了很多這樣的工作開發人員編寫的代碼:std::cout << "Test line\n";是否有技術上的理由選擇一個而不是另一個,還是僅僅是編碼風格的問題?
查看完整描述

4 回答

?
慕的地6264312

TA貢獻1817條經驗 獲得超6個贊

如果文件是在文本模式下打開的,那么變化的行尾字符并不重要,除非您要求二進制文件,否則這就是您所得到的。編譯后的程序將寫出系統編譯的正確內容。

唯一的區別是std::endl刷新輸出緩沖區,以及'\n'不會的。如果不希望緩沖區頻繁刷新,請使用'\n'..如果需要(例如,如果希望獲得所有輸出,并且程序不穩定),請使用std::endl.


查看完整回答
反對 回復 2019-05-31
?
慕桂英546537

TA貢獻1848條經驗 獲得超10個贊

這種區別可以通過以下幾點加以說明:

std::cout << std::endl;

等于

std::cout << '\n' << std::flush;

所以,

  • 使用

    std::endl

    如果要強制立即刷新輸出,請執行以下操作。
  • 使用

    \n

    如果您擔心性能(如果您使用的是

    <<

    (操作員)

我用\n在大多數線路上。
然后使用std::endl在段落的末尾(但這只是一個習慣,通常不是必要的)。

與其他索賠相反,\n只有當流到文件時,字符才被映射到正確的行序列的平臺末端(std::cinstd::cout是特殊的,但仍然是文件(或類似文件)。


查看完整回答
反對 回復 2019-05-31
?
MMTTMM

TA貢獻1869條經驗 獲得超4個贊

我記得在標準中讀到過這方面的內容,下面是這樣說的:

參見C11標準,它定義了標準流的行為方式,因為C+程序與CRT接口,C11標準應該在這里控制沖洗策略。

ISO/IEC 9899:201X

7.21.3§7

在程序啟動時,三個文本流是預先定義的,不需要顯式打開-標準輸入(用于讀取常規輸入)、標準輸出(用于寫入常規輸出)和標準錯誤(用于寫入診斷輸出)。在最初打開時,標準錯誤流沒有被完全緩沖;標準輸入流和標準輸出流被完全緩沖當且僅當可以確定該流不引用交互設備時。

7.21.3§3

當流未緩沖時,字符將盡快從源或目的地出現。否則,字符可以作為塊累積和傳輸到或從主機環境中傳輸。當流被完全緩沖時,當緩沖區被填充時,字符將作為塊傳送到或從主機環境中傳輸。當流被緩沖時,當遇到新行字符時,字符將作為塊傳送到或從主機環境中傳輸。此外,當緩沖區被填充時,當輸入被請求到非緩沖流時,或者在需要從主機環境傳輸字符的行緩沖流上請求輸入時,字符打算作為塊傳輸到主機環境。對這些特性的支持是實現定義的,并且可能通過setbuf和setvbuf函數受到影響。

這意味著std::coutstd::cin全緩沖當且僅當他們指的是一種非交互式設備。換句話說,如果stdout連接到終端,那么行為就沒有區別。

但是,如果std::cout.sync_with_stdio(false)被調用,那么'\n'即使對交互設備也不會造成同花順。

查看完整回答
反對 回復 2019-05-31
  • 4 回答
  • 0 關注
  • 779 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號