std::basic_streambuf<CharT,Traits>::setp
來自 cppreference.com
< cpp | io | basic streambuf
protected: void setp( char_type* pbeg, char_type* pend ); |
||
設定定義放置區的值。
呼叫後,pbase() == pbeg、pptr() == pbeg 和 epptr() == pend 均為 true。
若 [
pbeg,
pend)
不是合法範圍,則行為未定義。
目錄 |
[編輯] 引數
pbeg | - | 指向放置區新起始的指標 |
pend | - | 指向放置區新結尾的指標 |
[編輯] 示例
執行此程式碼
#include <array> #include <cstddef> #include <iostream> // Buffer for std::ostream implemented by std::array template<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"; else std::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(); }
輸出
h e l l o , \0 \0 \0 \0
[編輯] 缺陷報告
下列更改行為的缺陷報告追溯地應用於以前出版的 C++ 標準。
缺陷報告 | 應用於 | 釋出時的行為 | 正確的行為 |
---|---|---|---|
LWG 4023 | C++98 | setp 不要求輸出序列是合法範圍 |
要求 |
[編輯] 參閱
重新定位輸入序列的起始、下一個和結束指標 (受保護成員函式) |