我正在用c ++编写一个简单的解析器。
我想删除std::ws
的前导空格。
bool Parser::readWhiteSpace()
{
std::cout << "Before : str=[" << this->_ss.str() << "], peek=[" << (char)this->_ss.peek() << ']'<< std::endl;
this->_ss >> std::ws;
std::cout << "After : str=[" << this->_ss.str() << "], peek=[" << (char)this->_ss.peek() << ']'<< std::endl;
return (true);
}
输出结果为:
Before : str=[ something], peek=[ ]
After : str=[ something], peek=[s]
我不明白为什么来自流的流和str不同步。 是不是应该影响str?
答案 0 :(得分:2)
字符串流有一个指针,即输出位置指示器,指向&#34; next&#34;字符。通过修剪前导空格,后备缓冲区本身不会被修改,但此位置指示符会递增。 std :: ws读取一个字符直到它是一个空格,因此你最后一眼看到这个指针指向s
。