命名空间
变体
操作

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

来自 cppreference.cn
< 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() 的目的是将获取区后备一个字符,若关联的字符序列允许(例如,文件支持的 streambuf 可能会从文件重载缓冲区,提早一个字符开始)。
2) 调用方试图放回一个不同于先前取走的字符(调用 pbackfail() 时,附带需要放回的字符)。此情况下,pbackfail() 的目的是将字符 c 放置到紧邻 basic_streambuf::gptr() 前的位置,并且如果可能,修改关联的字符序列以反映此更改。这可能涉及如第一种情况中那样后备获取区。

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