“cpp/io/basic stringbuf/pbackfail”的版本间的差异

来自cppreference.com
< cpp‎ | io‎ | basic stringbuf
(link to ja)
 
第8行: 第8行:
 
 此受保护虚函数为公开函数 {{l2tt|cpp/io/basic_streambuf/sungetc}} 和 {{l2tt|cpp/io/basic_streambuf/sputbackc}} 所调用(转而为 {{l2tt|cpp/io/basic_istream/unget}} 和 {{l2tt|cpp/io/basic_istream/putback}} 所调用)。
 
 此受保护虚函数为公开函数 {{l2tt|cpp/io/basic_streambuf/sungetc}} 和 {{l2tt|cpp/io/basic_streambuf/sputbackc}} 所调用(转而为 {{l2tt|cpp/io/basic_istream/unget}} 和 {{l2tt|cpp/io/basic_istream/putback}} 所调用)。
  
@1@调用方要求获取区后备一个字符(以无参 或以 {{c|Traits::eof()}} 为参 调用 {{tt|pbackfail()}}
+
@1@ 调用方要求获取区后备一个字符(以无 参或以 {{c|Traits::eof()}} 为 参调用 {{tt|pbackfail()}})
:@a@首先,检查是否有回放位置,而若确实无回放位置则失败( stringbuf 无重读用的外部字符序列)
+
:@a@ 首先,检查是否有回放位置,而若确实无回放位置则失败( stringbuf 无重读用的外部字符序列)
:@b@若调用方错误而回放位置实际上可用,则简单地自减 {{l2tt|cpp/io/basic_streambuf/gptr|gptr()}} ,例如以调用 {{c|gbump(-1)}}
+
:@b@ 若调用方错误而回放位置实际上可用,则简单地自减 {{l2tt|cpp/io/basic_streambuf/gptr|gptr()}},例如以调用 {{c|gbump(-1)}}。
@2@调用方试图回放的字符异于之前取得者(以要需要放回的字符调用 {{tt|pbackfail()}} ),该情况下
+
@2@ 调用方试图回放的字符异于之前取得者(以要需要放回的字符调用 {{tt|pbackfail()}}),该情况下
:@a@首先,检查是否有回放位置,若无则失败。
+
:@a@ 首先,检查是否有回放位置,若无则失败。
:@b@然后检查会放位置中有什么字符。若其处保有的字符已等于 {{tt|c}} ,以 {{c|Traits::eq(to_char_type(c), gptr()[-1])}} 确定,则简单地自减 {{l2tt|cpp/io/basic_streambuf/gptr|gptr()}}
+
:@b@ 然后检查会放位置中有什么字符。若其处保有的字符已等于 {{tt|c}},以 {{c|Traits::eq(to_char_type(c), gptr()[-1])}} 确定,则简单地自减 {{l2tt|cpp/io/basic_streambuf/gptr|gptr()}}。
:@c@否则,若缓冲区仅为读取打开,则失败。
+
:@c@ 否则,若缓冲区仅为读取打开,则失败。
:@d@否则,若缓冲区为写入打开( {{c|mode && std::ios_base::out}} 非零),则自减 {{l2tt|cpp/io/basic_streambuf/gptr|gptr()}} 并写入 {{tt|c}} 到调整后的 gptr() 所指向的位置。
+
:@d@ 否则,若缓冲区为写入打开( {{c|mode && std::ios_base::out}} 非零),则自减 {{l2tt|cpp/io/basic_streambuf/gptr|gptr()}} 并写入 {{tt|c}} 到调整后的 gptr() 所指向的位置。
  
 
===参数===
 
===参数===
第23行: 第23行:
  
 
===返回值===
 
===返回值===
 成功时为 {{c|c}} ,除非 {{tt|c}} 为 {{c|Traits::eof()}} ,该情况下返回 {{c|Traits::not_eof(c)}}
+
 成功时为 {{c|c}},除非 {{tt|c}} 为 {{c|Traits::eof()}},该情况下返回 {{c|Traits::not_eof(c)}}。
  
 失败时为 {{c|Traits::eof()}}
+
 失败时为 {{c|Traits::eof()}}。
  
 
===示例===
 
===示例===

2023年12月14日 (四) 10:42的最后版本

 
 
 
 
protected:
virtual int_type pbackfail( int_type c = Traits::eof() )

此受保护虚函数为公开函数 basic_streambuf::sungetcbasic_streambuf::sputbackc 所调用(转而为 basic_istream::ungetbasic_istream::putback 所调用)。

1) 调用方要求获取区后备一个字符(以无实参或以 Traits::eof() 为实参调用 pbackfail()
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,除非 cTraits::eof(),该情况下返回 Traits::not_eof(c)

失败时为 Traits::eof()

[编辑] 示例

[编辑] 参阅

将字符放回输入序列,可能修改输入序列
(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> 的公开成员函数) [编辑]