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

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

我注意到当我使用 istringstream eof() 时 return 不为真,即使整个字符串为 "consumed"。例如:

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

输出(VS2015):

-1 false
当所有数据都被消耗时,

eof() 不应该 return true。它应该 return true 当您尝试读取 比可用数据更多 的数据时。

在这个例子中,你永远不会那样做。

特别是,peek 是一个 "request",即使没有任何内容可读,它也不会设置 EOF;因为你在偷看但是,它 return 宏的值 EOF (通常为 -1),这就是您在输出 peek() 时看到的内容的结果。流中没有 "appended"。

阅读您使用的函数的文档。

std::istream::peek

Peek next character Returns the next character in the input sequence, without extracting it: The character is left as the next character to be extracted from the stream.

If any internal state flags is already set before the call or is set during the call, the function returns the end-of-file value (EOF).

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