std::basic_stringbuf<CharT,Traits,Allocator>::init_buf_ptrs
来自 cppreference.cn
< cpp | io | basic stringbuf
void init_buf_ptrs(); |
(仅供演示*) | |
根据 mode 初始化来自 buf 的输入和输出序列。buf 和 mode 是 basic_stringbuf 的仅供演示的数据成员 *this。
此函数返回后立即:
- 如果 std::ios_base::out 在 mode 中设置,则 pbase() 指向 buf.front() 且 epptr() >= pbase() + buf.size() 为 true;
- 此外,如果 std::ios_base::ate 在 mode 中设置,则 pptr() == pbase() + buf.size() 为 true,
- 否则 pptr() == pbase() 为 true。
- 如果 std::ios_base::in 在 mode 中设置,则 eback() 指向 buf.front(),且 gptr() == eback() && egptr() == eback() + buf.size() 为 true。
[编辑] 注解
出于效率原因,流缓冲区操作可能会违反 buf 的不变性,当它被封装在 std::basic_stringbuf
中时,例如,通过写入范围 [
buf.data() + buf.size(),
buf.data() + buf.capacity())
内的字符。
所有从 buf 检索 std::basic_string 的操作都确保 std::basic_string 不变性在返回的值上成立。
[编辑] 缺陷报告
以下行为变更缺陷报告被追溯应用于先前发布的 C++ 标准。
DR | 应用于 | 已发布行为 | 正确行为 |
---|---|---|---|
LWG 1448 | C++98 | 调用 init_buf_ptrs() 会使pptr() == pbase() + buf.data() 对于既是输入流又是输出流的流 |
使得 pptr() == pbase() + buf.size() 对于追加流 |