Namespaces
Variants

std::basic_stringbuf<CharT,Traits,Allocator>:: 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() 或传入 Traits :: eof ( ) 作为参数)
a) 首先,检查是否存在回退位置,如果确实不存在,则操作失败。(stringbuf 没有可供重新读取的外部字符源)
b) 若调用方判断有误且回退位置实际可用时,只需递减 basic_streambuf::gptr() ,例如通过调用 gbump ( - 1 ) 实现。
2) 调用方尝试回放一个与先前读取字符不同的字符(此时会调用 pbackfail() 并传入需要回放的字符),在这种情况下
a) 首先,检查是否存在回退位置,若不存在则失败。
b) 随后检查回退位置中的字符。若该位置已存在的字符与 c 相等(通过 Traits :: eq ( to_char_type ( c ) , gptr ( ) [ - 1 ] ) 判定),则直接递减 basic_streambuf::gptr()
c) 否则,如果缓冲区仅以读取模式打开,则操作失败。
d) 否则,若缓冲区为写入模式打开( mode && std:: ios_base :: out 非零),则递减 basic_streambuf::gptr() 并将 c 写入调整后的 gptr() 所指位置。

目录

参数

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> 的公开成员函数)