std::basic_streambuf<CharT,Traits>::pbackfail
来自cppreference.com
< 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++ 标准。
缺陷报告 | 应用于 | 出版时的行为 | 正确行为 |
---|---|---|---|
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 的虚受保护成员函数) |
回移一位输出序列中的下一位置指针 (公开成员函数) | |
在输入序列中放回一个字符 (公开成员函数) |