请教underflow/overflow的问题
一直不太明白streambuf的underflow和overflow的作用,所以写了以下代码测试一下,但发现underflow根本没有被调用到。请指教一下,谢谢!
class mystringbuf : public stringbuf {
protected:
virtual int_type underflow();
virtual int_type overflow(int_type c);
public:
mystringbuf(string &s, ios_base::openmode mode = ios_base::in | ios_base::out);
};
mystringbuf::mystringbuf(string &s, ios_base::openmode mode)
: stringbuf(s, mode) { }
mystringbuf::int_type mystringbuf::underflow()
{
cout << "underflow here";
return stringbuf::underflow();
}
mystringbuf::int_type mystringbuf::overflow(int_type c)
{
cout << "overflow here";
return stringbuf::overflow(c);
}
class imystringstream : public istream {
public:
explicit imystringstream(mystringbuf* sb);
};
imystringstream::imystringstream(mystringbuf* sb)
: istream(sb) { }
void test() {
mystringbuf buf("33 deg ddda dd");
imystreambuf s(&buf);
int i;
s >> i;
}