stringstream 通过字符串直接初始化后clear失效?
其实从rdstate的返回值来看的话,clear的效果是还有的,复原了状态值,但无法让字符串流再流入string型变量
#include <vector>
#include <sstream>
#include <string>
#include <cstdio>
#include <iostream>
using namespace std;
int main() {
int flag;
scanf("%d ", &flag);//是与问题无关的int变量
vector<string>first, second;//两个vector 容器,分别存储第二行和第三行的字符串
string str1, str2,tmp;
getline(cin, str1);
getline(cin, str2);//输入
stringstream input;//应用字符串流,第二次操作时改为stringstream input(str1);
input << str1;//读入字符串,第二次操作时这一行不要了
cout << input.rdstate() << endl;
while (input >> tmp)
first.push_back(tmp);//生成<string>vector
cout << input.rdstate() << endl;
input.clear();
cout << input.rdstate() << endl;
input << str2;
cout << input.rdstate() << endl;
while (input >> tmp)
second.push_back(tmp);
cout << input.rdstate() << endl;
cout << first.size() << endl << second.size() << endl;
return 0;
}
这样操作是正常的,第一次结果如下

第二次操作对代码的修改只是改变了字符串流对象的初始化方式,详见代码注释
结果如下

注意到两次输出唯一的差别在于第二个vector的size是否为空。请问各位king谁能解释其中的原理?