考虑以下代码片段:
#include <iostream>
#include <sstream>
int main()
{
std::stringstream ss;
ss << "12345";
unsigned short s;
ss >> s;
ss << "foo";
std::cout << std::boolalpha
<< "\nss.eof() = " << ss.eof()
<< "\nss.good() = " << ss.good()
<< "\nss.bad() = " << ss.bad()
<< "\nss.fail() = " << ss.fail()
<< "\nss.str() = " << ss.str();
}
clang++ trunk 打印以下结果:
ss.eof() = true ss.good() = false ss.bad() = false ss.fail() = false ss.str() = 12345
g++ trunk 打印以下结果:
ss.eof() = true ss.good() = false ss.bad() = false ss.fail() = true ss.str() = 12345
如您所见,ss.fail()
两个编译器之间的值不同。标准对这种情况下的行为有什么看法std::stringstream
?在写入已使用的流时设置failbit
/是实现定义的吗?badbit