在二进制模式下打开输入文件流时设置skipws标志

时间:2011-08-31 07:31:54

标签: c++ filestream inputstream

我知道不应该在以二进制模式打开的输入流上使用提取运算符,而应该使用成员函数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标志的原因是什么?

1 个答案:

答案 0 :(得分:4)

“二进制”模式,由std::ios_base::binary控制,仅用于关闭标准C ++ \n字符与存储在文件中的系统特定换行序列之间换行符的转换。

它完全独立于您是否正在解析包含有意义的分隔空格或一些完全不同的字节格式的文件,因此没有理由将两个正交的功能组合在一起。

(C ++标准对二进制模式的含义并没有太多说明,C标准中有更详细的内容讨论了文本流和二进制流之间的潜在差异。二进制流必须回读字节,因为它们是在任何给定的系统上写入,而文本流只需要这样做,给定一些限制,在新行之前没有额外的空格,并且除了换行符和制表符之外没有任何控制字符。系统不需要在二进制和二进制之间做任何区分。文本流。)