我知道不应在以二进制模式打开的输入流上使用提取运算符,但成员函数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 标准中有更多详细信息,其中讨论了文本流和二进制流之间的潜在差异。二进制流必须逐字节读回,因为它们被写入任何给定的系统,而文本流只需要在给定一些限制的情况下这样做,这些限制集中在换行符之前不能有额外的空格,并且除了换行符和制表符之外不能有任何控制字符。系统不需要在二进制流和文本流之间进行任何区分。 )
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)