std::basic_istream<CharT,Traits>:: putback
|
basic_istream
&
putback
(
char_type ch
)
;
|
||
将字符 ch 放回输入流,使得下一个被提取的字符将是 ch 。
首先清除
eofbit
,随后行为表现为
无格式输入函数
。在构造并检查哨兵对象后,若
rdbuf()
非空,则调用
rdbuf
(
)
-
>
sputbackc
(
ch
)
,该操作会调用
rdbuf
(
)
-
>
pbackfail
(
ch
)
——当
ch
不等于最近提取的字符时执行此调用。
如果
rdbuf()
为空,或者如果
rdbuf
-
>
sputbackc
(
ch
)
返回
Traits
::
eof
(
)
,则调用
setstate
(
badbit
)
。
在任何情况下,将
gcount()
计数器设置为零。
目录 |
参数
| ch | - | 要放入输入流的字符 |
返回值
* this
异常
如果内部操作抛出异常,该异常会被捕获并设置
badbit
。如果为
badbit
设置了
exceptions()
,则异常会被重新抛出。
示例
演示修改性和非修改性
putback()
的区别。
#include <iostream> #include <sstream> int main() { std::stringstream s1("Hello, world"); // IO 流 s1.get(); if (s1.putback('Y')) // 修改缓冲区 std::cout << s1.rdbuf() << '\n'; else std::cout << "putback failed\n"; std::cout << "--\n"; std::istringstream s2("Hello, world"); // 仅输入流 s2.get(); if (s2.putback('Y')) // 无法修改仅输入缓冲区 std::cout << s2.rdbuf() << '\n'; else std::cout << "putback failed\n"; s2.clear(); std::cout << "--\n"; if (s2.putback('H')) // 非修改性 putback std::cout << s2.rdbuf() << '\n'; else std::cout << "putback failed\n"; }
输出:
Yello, world -- putback failed -- Hello, world
缺陷报告
下列行为变更缺陷报告被追溯应用于先前发布的C++标准。
| DR | 适用范围 | 发布时的行为 | 正确行为 |
|---|---|---|---|
| LWG 2243 | C++98 |
sputbackc()
在调用时未提供任何参数
|
应传入 ch 参数调用 |
参见
|
将单个字符放回输入序列
(
std::basic_streambuf<CharT,Traits>
的公开成员函数)
|
|
|
取消提取字符
(公开成员函数) |
|
|
读取下一字符但不提取
(公开成员函数) |