C++ stringstream tellg()

C++ stringstream tellg()

本文关键字:tellg stringstream C++      更新时间:2023-10-16

我正在用c++98编写一个小解析器(是的,不能使用11)。我正在使用std::stringstream,我通过引用传递给不同的函数,让我们称它们为子解析器。为了知道要调用哪个子解析器,我需要知道字符串流中的下一个单词。由于stringstream是一个istream,它确实有一个peek函数,该函数返回下一个字符,而无需移动迭代器/指针/标记stringstream中当前位置的任何东西,但是由于我需要下一个单词,我编写了一个函数peekWord(暂时忽略注释行):

std::string Parser::peekWord(std::stringstream& sstream){
std::string myString = "EOF";
  if(!sstream.eof()){
    unsigned pos = sstream.tellg();
    sstream >> myString;
    //sstream.tellg();
    sstream.seekg(pos);
  }
  return myString;
}

似乎工作得很好。在调试时,我注意到,一旦我调用tellg()之后,指针/标记/东西已经移动到最后一个单词(返回-1),seekg(xBeforeLastPosition)不再工作,仍然将位置设置为-1。

stringstrea m的末尾调用tellg()是否设置了failbit或类似的东西?我本能地希望空函数tellg()没有副作用。

期待你们的消息:)

pip

tellg被指定为:

返回:构造一个哨兵对象后,如果fail() != false,返回pos_type(-1)表示失败。否则,返回rdbuf()->pubseekoff(0, cur, in)

(istream::sentry对象用于检查输入是否可用)

所以,是的,它会将failbit设置为EOF。但是,您可以通过检查eof()并使用clear()返回到正常处理来检测此问题。