C++:流输出操作成功,但状态不佳

c++: stream output operation successful but state not good

本文关键字:状态 成功 输出 操作 C++      更新时间:2023-10-16

我正在尝试了解有关流状态的更多信息,并在此处阅读如果流上的最新I/O操作成功完成,则good()返回true。如果我理解正确,我试图遵循这与上述陈述背道而驰

#include <iostream>
#include <sstream>

int main() {
std::stringstream ss;
int x;
ss << "42";
ss >> x;
std::cout << x << std::endl; // prints 42 as expected
std::cout << ss.good() << std::endl; // prints 0, expected 1
return 0;
}

有人可以澄清为什么即使最后一个(输出(操作成功,流状态也不好吗?谢谢

直到下一次提取文件流时才设置 EOF 的原因不是因为文件/字符串流之间的行为有任何差异,而是因为许多文本编辑器在文件末尾秘密插入换行符。尝试创建包含以下内容的文本文件:

a
b

然后用类似od -c的东西检查它,你可能会看到:

0000000   a  n   b  n
0000004

注意 b 后面偷偷摸摸的换行符。如果在字符串流的末尾插入换行符,则应观察到相同的行为。