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

来自cppreference.com
< cpp‎ | io‎ | basic streambuf
 
 
 
 
protected:
void setp( char_type* pbeg, char_type* pend );

设置定义放置区的指针值。

调用后,pbase()== pbegpptr()== pbegepptr()== pend 都是 true

如果 [pbegpend) 不是有效范围,那么行为未定义。

目录

[编辑]参数

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 不要求输出序列是有效范围 要求有效

[编辑]参阅

重定位输入序列的起始、下一位置和终止指针
(受保护成员函数)[编辑]
close