我注意到,当我使用istringstream时,eof()即使整个字符串被消耗掉也不会返回true。例如:
char ch;
istringstream ss{ "0" };
ss >> ch;
cout << ss.peek() << " " << (ss.eof() ? "true" : "false");
输出(VS2015):
-1 false
答案 0 :(得分:6)
eof()
不应返回true
。当您尝试读取更多数据时,它应该返回true
。
在这个例子中,你永远不会这样做。
特别是,peek
是一个“请求”,即使没有任何东西可以阅读,也不会设置EOF;因为你好,偷看。但是,它将返回宏EOF
的值(通常为-1),这是您在输出peek()
的结果时所看到的。没有任何内容“附加”到流中。
阅读您使用的功能的文档。
答案 1 :(得分:0)
std::istream::peek
Peek next character返回输入序列中的下一个字符, 不提取它:字符留作下一个字符 从流中提取。
如果在呼叫之前已设置了任何内部状态标志或已设置 在调用期间,该函数返回文件结束值(EOF)。