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> // 以 std::array 实现的 std::ostream 缓冲区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(){// 设置 std::basic_streambuf 放置区指针以 “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{};// 值初始化 “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 不要求输出序列是有效范围 | 要求有效 |
[编辑]参阅
重定位输入序列的起始、下一位置和终止指针 (受保护成员函数) |