std::basic_streambuf<CharT,Traits>::setp
来自cppreference.com
<tbody>
</tbody>
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";
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 不要求输出序列是有效范围
|
要求有效 |
参阅
| 重定位输入序列的起始、下一位置和终止指针 (受保护成员函数) |