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

时间:2017-05-03 22:21:34

标签: c++ visual-c++ stream char istringstream

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

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

输出(VS2015):

-1 false

2 个答案:

答案 0 :(得分:6)

消耗所有数据时,

eof()不应返回true。当您尝试读取更多数据时,它应该返回true

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

特别是,peek是一个“请求”,即使没有任何东西可以阅读,也不会设置EOF;因为你好,偷看。但是,它返回宏EOF的值(通常为-1),这是您在输出peek()的结果时所看到的。没有任何内容“附加”到流中。

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

答案 1 :(得分:0)

std::istream::peek
  

Peek next character返回输入序列中的下一个字符,   不提取它:字符留作下一个字符   从流中提取。

     

如果在呼叫之前已设置了任何内部状态标志或已设置   在调用期间,该函数返回文件结束值(EOF)。

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