2017-07-01 47 views
1

我想了解更多关于流状态的信息,并且阅读heregood()如果流最近的I/O操作成功完成,则返回true。我曾尝试以下,如果我理解正确的话,违背了上述说法C++:流输出操作成功,但状态不好

#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; 
} 

有人能解释,为什么流的状态并不好,即使最后(输出)操作成功?谢谢

+2

流已经意识到它到达文件结束,所以它不再是“好”。 –

+0

在'>>'的数字超载期间遇到蒸汽末端,请参阅http://en.cppreference.com/w/cpp/io/ios_base/iostate – pat

+0

谢谢大家。我的印象是eofbit只能在下一个字符提取时设置(这是从文件读取时发生的情况)。 – linuxfever

回答

1

为什么在文件流的下一次提取之前没有设置EOF的原因不是因为文件/字符串流之间的行为有任何差异,而是因为许多文本编辑器在一个文件结尾处偷偷插入换行符文件。尝试创建一个文本文件的内容:

a 
b 

然后用一些检查像od -c,你可能会看到:

0000000 a \n b \n 
0000004 

通知B之后偷偷摸摸换行。如果在字符串流的末尾插入换行符,则应该遵守相同的行为。

+0

谢谢,这是非常有道理的 – linuxfever

相关问题