命名空间
变体
操作

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::ungetbasic_istream::putback 调用)调用,当以下任一情况发生时

1) 获取区域中没有回退位置(pbackfail() 不带参数调用)。在这种情况下,pbackfail() 的目的是将获取区域后退一个字符,如果关联的字符序列允许这样做(例如,一个文件支持的流缓冲区可能会从文件重新加载缓冲区,从一个字符前开始)。
2) 调用者尝试回退一个与之前检索到的字符不同的字符(pbackfail() 带有需要回退的字符调用)。在这种情况下,pbackfail() 的目的是将字符 c 放置在紧挨着 basic_streambuf::gptr() 之前的获取区域中的位置,并且如果可能,修改关联的字符序列以反映此更改。这可能涉及将获取区域后退,如同第一个变体一样。

此函数的默认基类版本什么也不做,并在所有情况下返回 Traits::eof()。此函数被派生类覆盖: basic_stringbuf::pbackfailbasic_filebuf::pbackfailstrstreambuf::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 的虚拟受保护成员函数) [编辑]
将输入序列中的下一个指针后退一个位置
(公共成员函数) [编辑]
将一个字符放回到输入序列中
(公共成员函数) [编辑]