| I/O manipulators | ||||
| Print functions(C++23) | ||||
| C-style I/O | ||||
| Buffers | ||||
(C++23) | ||||
(C++98/26*) | ||||
(C++20) | ||||
| Streams | ||||
| Abstractions | ||||
| File I/O | ||||
| String I/O | ||||
| Array I/O | ||||
(C++23) | ||||
(C++23) | ||||
(C++23) | ||||
(C++98/26*) | ||||
(C++98/26*) | ||||
(C++98/26*) | ||||
| Synchronized Output | ||||
(C++20) | ||||
| Types | ||||
| Error category interface | ||||
(C++11) | ||||
(C++11) |
|
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
protected: void setp( char_type* pbeg, char_type* pend); | ||
Sets the values of the pointers defining the put area.
After the call,pbase()== pbeg,pptr()== pbeg andepptr()== pend are alltrue.
If any of[pbeg, pend) is not avalid range, the behavior is undefined.
Contents |
| pbeg | - | pointer to the new beginning of the put area |
| pend | - | pointer to the new end of the put area |
#include <array>#include <cstddef>#include <iostream> // Buffer for std::ostream implemented by std::arraytemplate<std::size_t size,class CharT=char>struct ArrayedStreamBuffer:std::basic_streambuf<CharT>{using Base=std::basic_streambuf<CharT>;using char_type=typename Base::char_type; ArrayedStreamBuffer(){// put area pointers to work with “buffer” Base::setp(buffer.data(), buffer.data()+ size);} void print_buffer(){for(char_type i: buffer){if(i==0)std::cout<<"\\0";elsestd::cout<< i;std::cout<<' ';}std::cout<<'\n';} private:std::array<char_type, size> buffer{};// value-initialize “buffer”}; int main(){ ArrayedStreamBuffer<10> streambuf;std::ostream stream(&streambuf); stream<<"hello"; stream<<","; streambuf.print_buffer();}
Output:
h e l l o , \0 \0 \0 \0
The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
| DR | Applied to | Behavior as published | Correct behavior |
|---|---|---|---|
| LWG 4023 | C++98 | setp did not require the output sequence to be a valid range | requires |
| repositions the beginning, next, and end pointers of the input sequence (protected member function)[edit] |