命名空间
变体
操作

std::basic_stringbuf<CharT,Traits,Allocator>::init_buf_ptrs

来自 cppreference.cn
< cpp‎ | io‎ | basic stringbuf
 
 
 
 
void init_buf_ptrs();
(仅供演示*)

根据 mode 初始化来自 buf 的输入和输出序列。bufmodebasic_stringbuf 的仅供演示的数据成员 *this

此函数返回后立即:

  • 如果 std::ios_base::outmode 中设置,则 pbase() 指向 buf.front()epptr() >= pbase() + buf.size()true
    • 此外,如果 std::ios_base::atemode 中设置,则 pptr() == pbase() + buf.size()true
    • 否则 pptr() == pbase()true
  • 如果 std::ios_base::inmode 中设置,则 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()
对于追加流