std::basic_stringbuf<CharT,Traits,Allocator>::init_buf_ptrs
来自 cppreference.com
< cpp | io | basic stringbuf
void init_buf_ptrs(); |
(仅供说明*) | |
根据 mode 从 buf 初始化输入和输出序列。 buf 和 mode 是 *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() 对于追加流 |