Namespaces
Variants

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

From cppreference.net
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()
    {
        // 设置输出区域指针以操作“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{}; // 值初始化“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 未要求输出序列必须是有效范围 要求必须满足

参见

重新定位输入序列的起始指针、下一个指针和结束指针
(受保护成员函数)