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++ 标准。
DR | 应用于 | 已发布的行为 | 正确行为 |
---|---|---|---|
LWG 4023 | C++98 | setp 不需要输出序列为有效范围 |
需要 |
[编辑] 另请参阅
重新定位输入序列的开始、下一个和结束指针 (受保护的成员函数) |