为什么我需要在重用之前清除stringstream?

nic*_*day 1 c++ stringstream

例如:

#include <iostream>
#include <sstream>
#include <string>
using namespace std;

int main() {
    int num = 10;
    string str;
    stringstream toString;
    toString << num;
    toString >> str;
    cout << str << "\n"; //10

    int num2 = 20;
    string str2;
    toString << num2;
    toString >> str2;
    cout << str2 << "\n"; //str2 is empty
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我知道我必须清除这个:

toString.str("");
toString.clear();
Run Code Online (Sandbox Code Playgroud)

但是为什么在使用运算符后它不会自动清除>>

Jon*_*ely 6

如果我这样做toString >> a >> b >> c并且第一个失败,我不希望清除该标志,以便最终状态似乎已成功.