c ++:流输出操作成功但状态不好

时间:2017-07-01 22:16:18

标签: c++ stringstream

我正在尝试了解有关流状态的更多信息,并阅读here good()如果流上最近的I / O操作成功完成,则返回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;
}

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

1 个答案:

答案 0 :(得分:1)

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

a
b

然后使用类似od -c的内容进行检查,您可能会看到:

0000000   a  \n   b  \n
0000004

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