簡體   English   中英

在二進制模式下打開輸入文件流時設置skipws標志

[英]skipws flag set when opening an input file stream in binary mode

我知道不應該在以二進制模式打開的輸入流上使用提取運算符,而應該使用成員函數read

std::ifstream ifs("file.bin", std::ios::in | std::ios::binary);
char c;
ifs >> c; // Should not be used
ifs.read(&c, 1); // OK

但無論如何它都可以完成。 所以我的問題是在二進制模式下打開輸入文件流時不取消設置skipws標志的原因是什么?

std::ios_base::binary控制的“二進制”模式僅用於關閉標准C ++ \\n字符與存儲在文件中的系統特定換行序列之間的換行符的轉換。

它完全獨立於您是否正在解析包含有意義的分隔空格或一些完全不同的字節格式的文件,因此沒有理由將兩個正交的功能組合在一起。

(C ++標准對二進制模式的含義並沒有太多說明,C標准中有更多細節討論了文本流和二進制流之間的潛在差異。二進制流必須在字節寫入時逐字回讀給定系統,而文本流只需要這樣做,給定一些限制,在新行之前沒有額外的空格,並且除了換行符和制表符之外沒有任何控制字符。系統不需要在二進制和文本流之間做任何區分。 )

暫無
暫無

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

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