1
int main()
{
std::ifstream istr("foo.txt");
int a, b;
istr >> a;
istr >> b;
}
假设行istr >> a
设置流的失败位或错误位。它定义的行为是否随后调用istr >> b
?正在调用操作符>>在istream中处于失败/错误状态未定义行为?
int main()
{
std::ifstream istr("foo.txt");
int a, b;
istr >> a;
istr >> b;
}
假设行istr >> a
设置流的失败位或错误位。它定义的行为是否随后调用istr >> b
?正在调用操作符>>在istream中处于失败/错误状态未定义行为?
是的,这是明确的。格式化输入的第一阶段是构造一个sentry
对象,该对象检查流的状态。如果状态不好,那么抽取什么也不做。
事后使用b
的值将是未定义的行为,因为它仍然是未初始化的。