Namespaces
Variants

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

From cppreference.net
protected :
virtual int_type pbackfail ( int_type c = Traits :: eof ( ) )

此受保护的虚函数由公有函数 basic_streambuf::sungetc basic_streambuf::sputbackc 调用(这两个函数又分别被 basic_istream::unget basic_istream::putback 调用)。

1) 调用方请求获取区域由一个字符进行回退(无参数调用 pbackfail() ),此时该函数从提前一个字节的位置重新读取文件,并递减 basic_streambuf::gptr() ,例如通过调用 gbump ( - 1 ) 实现。
2) 调用方尝试回放一个与先前读取字符不同的字符(此时会以需要回退的字符为参数调用 pbackfail() ),在这种情况下
a) 首先,检查是否存在回退位置,若不存在,则通过从比当前提前一个字节的位置重新读取文件来回退获取区域。
a) 随后检查回退位置中的字符。若该位置持有的字符已等于 c (通过 Traits :: eq ( to_char_type ( c ) , gptr ( ) [ - 1 ] ) 判定),则直接递减 basic_streambuf::gptr()
b) 否则,若缓冲区允许修改其自身的获取区,则递减 basic_streambuf::gptr() 并将 c 写入调整后的 gptr() 所指位置。

此函数从不修改文件,仅修改内存缓冲区中的获取区域。

如果文件未打开( is_open ( ) == false ),此函数将立即返回 Traits :: eof ( )

目录

参数

c - 要回退的字符,或 Traits::eof() 表示请求回退获取区域

返回值

成功时返回 c ,除非 c Traits :: eof ( ) ,此时返回 Traits :: not_eof ( c )

Traits :: eof ( ) 在失败时返回。

示例

参见

[virtual]
将字符放回输入序列,可能修改输入序列
( std::basic_streambuf<CharT,Traits> 的虚受保护成员函数)
将输入序列中的下一个指针向后移动一位
( std::basic_streambuf<CharT,Traits> 的公开成员函数)
将一个字符放回输入序列
( std::basic_streambuf<CharT,Traits> 的公开成员函数)
取消提取一个字符
( std::basic_istream<CharT,Traits> 的公开成员函数)
将字符放入输入流
( std::basic_istream<CharT,Traits> 的公开成员函数)