Ant*_*rez 3 c++ inputstream filestream
我知道不应该在以二进制模式打开的输入流上使用提取运算符,而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
Run Code Online (Sandbox Code Playgroud)
但是还是可以做到的。所以我的问题是,在二进制模式下不取消输入文件流上的skipws标志的理由是什么?
由控制的“二进制”模式std::ios_base::binary仅用于关闭标准C ++ \n字符与存储在文件中的系统特定换行序列之间的换行翻译。
这完全与您要解析的文件包含有意义的分隔空格还是某些完全不同的字节格式无关,因此没有理由将两个正交的功能绑定在一起。
(C ++标准并没有过多说明二进制模式的含义,C标准中有更多细节讨论了文本流和二进制流之间的潜在差异。二进制流必须像写在任何二进制文件上一样逐字节读取字节在给定的系统中,文本流只需要这样做,就给定了许多限制,这些限制集中在换行符之前没有多余的空格,除了换行符和制表符之外没有任何控制字符,系统根本不需要在二进制流和文本流之间进行任何区分。 )