std::basic_streambuf<CharT,Traits>::pbackfail
来自 cppreference.cn
< cpp | io | basic_streambuf
protected: virtual int_type pbackfail( int_type c = Traits::eof() ); |
||
只有在满足以下任一条件时,才能调用此函数
- gptr() 为 空,
- gptr() == eback(),或
- traits::eq(traits::to_char_type(c), gptr()[-1]) 返回 false。
公共函数 sungetc() 和 sputbackc() (它们又被 basic_istream::unget 和 basic_istream::putback 调用)在以下任一情况下调用此函数:
1) 获取区域中没有放回位置(调用
pbackfail()
时没有参数)。在这种情况下,pbackfail()
的目的是将获取区域后退一个字符,如果关联的字符序列允许这样做(例如,文件支持的 streambuf 可能会从文件中重新加载缓冲区,从前一个字符开始)。2) 调用者尝试放回与先前检索到的字符不同的字符(调用
pbackfail()
时带有需要放回的字符)。在这种情况下,pbackfail()
的目的是将字符 c
放置到 basic_streambuf::gptr() 之前的获取区域中的位置,并且如果可能,修改关联的字符序列以反映此更改。这可能涉及像第一种变体中那样后退获取区域。此函数的默认基类版本不执行任何操作,并在所有情况下返回 Traits::eof()。此函数被派生类 basic_stringbuf::pbackfail、basic_filebuf::pbackfail、strstreambuf::pbackfail 重写,并且预计会被用户定义和第三方库流类重写。
目录 |
[编辑] 参数
ch | - | 要放回的字符,或者如果仅请求后退,则为 Traits::eof() |
[编辑] 返回值
失败时返回 Traits::eof(),成功时返回其他值。基类版本总是失败。
[编辑] 示例
本节内容不完整 原因:没有示例 |
[编辑] 缺陷报告
以下行为变更缺陷报告被追溯应用于先前发布的 C++ 标准。
DR | 应用于 | 已发布行为 | 正确行为 |
---|---|---|---|
LWG 32 | C++98 | 调用条件“traits::eq(*gptr(),traits::to_char_type(c))” 返回 false' 与 sputbackc() 的描述不匹配 |
已更正为匹配 该描述 |
[编辑] 参见
[虚函数] |
后退输入序列以取消获取字符,不影响关联的文件 ( std::basic_filebuf<CharT,Traits> 的虚函数受保护成员函数) |
[虚函数] |
将字符放回输入序列 ( std::basic_stringbuf<CharT,Traits,Allocator> 的虚函数受保护成员函数) |
[虚函数] |
后退输入序列以取消获取字符 ( std::strstreambuf 的虚函数受保护成员函数) |
将输入序列中的下一个指针后退一位 (公共成员函数) | |
将一个字符放回输入序列 (公共成员函数) |