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

0 c++ stream char visual-c++ istringstream

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

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

输出(VS2015):

-1 false
Run Code Online (Sandbox Code Playgroud)

Lig*_*ica 6

eof()true在消耗所有数据时不应该返回.它应该返回true,当你尝试读取更多的数据比可用.

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

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

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