c ++:流输出操作成功但状态不好
c++: stream output operation successful but state not good
我正在尝试了解有关流状态的更多信息,并阅读 here 如果对流的最近 I/O 操作成功完成,则 good()
returns 为真。我已经尝试遵循,如果我理解正确的话,这与上述声明相悖
#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 的原因不是因为 file/string 流之间的行为有任何差异,而是因为许多文本编辑器偷偷地在末尾插入换行符一份文件。尝试创建一个包含以下内容的文本文件:
a
b
然后用 od -c
之类的东西检查它,你可能会看到:
0000000 a \n b \n
0000004
注意 b 后面偷偷摸摸的换行符。如果您在字符串流的末尾插入一个换行符,您应该观察到相同的行为。
我正在尝试了解有关流状态的更多信息,并阅读 here 如果对流的最近 I/O 操作成功完成,则 good()
returns 为真。我已经尝试遵循,如果我理解正确的话,这与上述声明相悖
#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 的原因不是因为 file/string 流之间的行为有任何差异,而是因为许多文本编辑器偷偷地在末尾插入换行符一份文件。尝试创建一个包含以下内容的文本文件:
a
b
然后用 od -c
之类的东西检查它,你可能会看到:
0000000 a \n b \n
0000004
注意 b 后面偷偷摸摸的换行符。如果您在字符串流的末尾插入一个换行符,您应该观察到相同的行为。