Movatterモバイル変換


[0]ホーム

URL:


cppreference.com
Namespaces
Variants
    Actions

      std::basic_streambuf<CharT,Traits>::underflow

      From cppreference.com
      <cpp‎ |io‎ |basic streambuf
       
       
       
      std::basic_streambuf
       
      protected:
      virtual int_type underflow();

      Ensures that at least one character is available in the input area by updating the pointers to the input area (if needed) and reading more data in from the input sequence (if applicable). Returns the value of that character (converted toint_type withTraits::to_int_type(c)) on success orTraits::eof() on failure.

      The function may updategptr,egptr andeback pointers to define the location of newly loaded data (if any). On failure, the function ensures that eithergptr()== nullptr orgptr()== egptr.

      The base class version of the function does nothing. The derived classes may override this function to allow updates to the get area in the case of exhaustion.

      Contents

      [edit]Parameters

      (none)

      [edit]Return value

      The value of the character pointed to by theget pointer after the call on success, orTraits::eof() otherwise.

      The base class version of the function returnstraits::eof().

      [edit]Note

      The public functions ofstd::streambuf call this function only ifgptr()== nullptr orgptr()>= egptr().

      [edit]Example

      [edit]
      Run this code
      #include <iostream>#include <sstream> class null_filter_buf:publicstd::streambuf{std::streambuf* src;char ch;// single-byte bufferprotected:int underflow(){        traits_type::int_type i;while((i= src->sbumpc())=='\0');// skip zeroesif(!traits_type::eq_int_type(i, traits_type::eof())){            ch= traits_type::to_char_type(i);            setg(&ch,&ch,&ch+1);// make one read position available}return i;}public:    null_filter_buf(std::streambuf* buf): src(buf){        setg(&ch,&ch+1,&ch+1);// buffer is initially full}}; void filtered_read(std::istream& in){std::streambuf* orig= in.rdbuf();    null_filter_buf buf(orig);    in.rdbuf(&buf);for(char c; in.get(c);)std::cout<< c;    in.rdbuf(orig);} int main(){char a[]="This i\0s\0an e\0\0\0xample";std::istringstream in(std::string(std::begin(a),std::end(a)));    filtered_read(in);}

      Output:

      This is an example

      [edit]See also

      [virtual]
      reads characters from the associated input sequence to the get area and advances the next pointer
      (virtual protected member function)[edit]
      [virtual]
      writes characters to the associated output sequence from the put area
      (virtual protected member function)[edit]
      [virtual]
      reads from the associated file
      (virtual protected member function ofstd::basic_filebuf<CharT,Traits>)[edit]
      [virtual]
      returns the next character available in the input sequence
      (virtual protected member function ofstd::basic_stringbuf<CharT,Traits,Allocator>)[edit]
      [virtual]
      reads a character from the input sequence without advancing the next pointer
      (virtual protected member function ofstd::strstreambuf)[edit]
      Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/io/basic_streambuf/underflow&oldid=124722"

      [8]ページ先頭

      ©2009-2025 Movatter.jp