istringstream - 为什么没有重置功能

时间:2016-07-01 14:41:08

标签: c++

以下是我的代码的简化版本:

#include <iostream>
#include <string>
#include <sstream>

int main() {
    std::istringstream f;

    f.clear();
    std::string s("line1");
    f.str(s);
    std::string line;    
    while (std::getline(f, line)) {
        std::cout << line << std::endl;
    }

    f.clear();     // must both clear() and str()
    f.str(s);
    while (std::getline(f, line)) {
        std::cout << line << std::endl;
    }

    return 0;
}

我的问题围绕这两行:

f.clear();     // must both clear() and str()
f.str(s);

调用f.str(s)对我来说是有问题的,但我发现只是调用clear()结束getline()之后的调用并不会读取任何内容。

我查看了istringstream接口并没有看到任何重置类型的功能,但只是问我以防万一。

str()对我不起作用的原因 - 我的类将istream *作为输入,它没有可能是文件或字符串的真实原件。

2 个答案:

答案 0 :(得分:2)

目前还不是很清楚你想要完成什么,但是如果你想再次阅读同一个流,var query = (from b in sovDB.myTable select new { myMinutes = Right("0" + SqlFunctions.StringConvert((int)(SqlFunctions.DateDiff("MINUTE", b.DateReceived, SqlFunctions.GetDate()) % 60)), 2) }).ToList(); istringstreamistream正常工作方式。

这两次打印“line1”:

seekg

答案 1 :(得分:0)

要重置 istringstream ,您需要致电。

f.str("")

f.clear()仅用于清除错误标记,而不是实际内容&#39;。