为什么 istringstream 在流的末尾附加'-1'字符?

Why istringstream appends '-1' character at the end of stream?

本文关键字:字符 istringstream 为什么      更新时间:2023-10-16

我注意到,即使整个字符串被"消耗"即使我使用istringstream eof((也不会返回true。例如:

char ch;
istringstream ss{ "0" };
ss >> ch;
cout << ss.peek() << " " << (ss.eof() ? "true" : "false");

输出(VS2015(:

-1 false

eof()不应在消耗所有数据时返回true。当您尝试读取数据数据时,它应该返回true

在此示例中,您永远不会做。

特别是,peek是一个"请求",即使没有剩下的阅读,也不会设置EOF。因为你好吧,偷看。但是,它 will 返回宏EOF(通常为-1(的值,这是输出peek()的结果时所看到的。没有"附加"流到流。

阅读您使用的功能的文档。

std::istream::peek

peek下一个字符返回输入序列中的下一个字符, 不提取它:字符是下一个字符 从流中提取。

如果已经在通话之前设置了任何内部状态标志或已设置 在呼叫期间,函数返回文件终止值(EOF(。

http://www.cplusplus.com/reference/istream/istream/ppeek/