Namespaces
Variants

std::basic_streambuf<CharT,Traits>:: pbackfail

From cppreference.net
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() 的作用是将获取区域回退一个字符,前提是关联的字符序列允许此操作(例如,基于文件的流缓冲区可以从文件重新加载缓冲区,并提前一个字符开始)。
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() 的描述不匹配
已修正以匹配
描述内容

参见

[virtual]
回退输入序列以归还一个字符,不影响关联的文件
( std::basic_filebuf<CharT,Traits> 的虚受保护成员函数)
[virtual]
将字符放回输入序列
( std::basic_stringbuf<CharT,Traits,Allocator> 的虚受保护成员函数)
[virtual]
回退输入序列以归还一个字符
( std::strstreambuf 的虚受保护成员函数)
将输入序列中的下一个指针向后移动一位
(公开成员函数)
将一个字符放回输入序列
(公开成员函数)