在 GameDev.net 上阅读这篇文章后,我决定看一看 C++ 标准。有几个std::istream
函数被标准描述为“未格式化的输入函数”(如tellg()
、read()
等)。"\r\n" -> "\n"
一直以来,我一直认为“未格式化的输入函数”意味着在使用“未格式化的输入函数”时(无论是文本模式还是二进制模式),在阅读时(例如,)文本不会被格式化。显然,情况并非如此,因为该read()
方法仍将转换"\r\n" -> "\n"
(如果std::ios_base::binary
未指定),尽管它是“未格式化的输入函数”。
现在我很困惑,因为我显然不理解正确的事情。“未格式化的输入函数”究竟是什么意思?是的,我已经阅读了第 27.7.2.3 节第 1 段,它似乎更多地谈论处理错误而不是其他任何内容(当然,我可能没有正确理解它,这可能是问题的一部分)。
我刚刚发现tellg()
不考虑格式转换的事实read()
相当混乱。在某种程度上,这是有道理的(tellg()
如果有的话,O(n) 也是有道理的,如果read()
没有的话,文本/二进制模式之间的差异将不那么显着)。但在另一个程度上,它似乎……不一致。我认为我的部分困惑和观察到的不一致可能来自我对“未格式化输入函数”的明显误解。