关于使用stringstream >> 给string 赋值的问题

//下面这段代码,我的运行结果在注释中已经给出了。
//对于istr第二次>>line,
//为什么不是将abcde传给了line,而是未成功改变 line的值呢
//求求大佬解答,谢谢啦!

int main()
{
 string line;
 string a = "12345";
 string b = "abcde";
 istringstream istr;

 istr.str(a);
 //12345
 cout << "将a拷贝到istr中,打印istr中的string拷贝:" << istr.str() << endl;
 istr >> line;
 cout << line << endl;//12345没问题

 istr.str(b);
 //abcde
 cout << "将b拷贝到istr中,打印istr中的string拷贝:" << istr.str() << endl;
 istr >> line;  //没起作用啊?????????????????????????
 cout << line << endl;//还是12345
}

参考GPT和自己的思路:使用stringstream类的str()函数将不同的字符串赋给字符串流istr.str()时,必须先使用clear()函数将“流错误状态”的标志位重置,这很重要,因为如果标志位未被重置,那么后面的输入或输出操作都将失效。对于这个问题的解决方法就是在每次使用istr.str()之前使用istr.clear()来重置输入流的状态。下面是修改后的代码:

#include<iostream>
#include<sstream>
#include<string>
using namespace std;
int main()
{
    string line;
    string a = "12345";
    string b = "abcde";
    istringstream istr;

    istr.str(a);
    //12345
    cout << "将a拷贝到istr中,打印istr中的string拷贝:" << istr.str() << endl;
    istr >> line;
    cout << line << endl;//12345没问题

    istr.clear();//重置状态
    istr.str(b);
    //abcde
    cout << "将b拷贝到istr中,打印istr中的string拷贝:" << istr.str() << endl;
    istr >> line;
    cout << line << endl;//abcde成功修改line的值
    return 0;
}