提取运算符(>>)是否可以覆盖变量?

Som*_*ent 2 c++ stringstream

我写了以下测试代码:

int main(int argc, char* argv[]) {
    stringstream ss;
    int num;

    ss << "54321";
    ss >> num;
    ss.str("");
    ss << "12345";
    ss >> num;

    fprintf(stderr, "%d\n", num);
}
Run Code Online (Sandbox Code Playgroud)

令我惊讶的是,结果是54321.如何使用提取运算符(>>)正确覆盖变量?

jro*_*rok 8

在第一次提取之后,您到达了流的末尾,因此已eofbit设置并且第二次提取失败.

int main(int argc, char* argv[]) {
    stringstream ss;
    int num;

    ss << "54321";
    ss >> num;

    // eofbit was set above,
    // we need to clear it
    ss.clear();

    ss.str("");
    ss << "12345";
    ss >> num;

    fprintf(stderr, "%d\n", num);
}
Run Code Online (Sandbox Code Playgroud)

clear()在尝试第二次提取之前调用成员函数.第二个问题是内部get指针的位置,它不会自动重置.使用seekg()来设置.

编辑:删除线的东西是不是neccesary,解释在这里.