命名空间
变体
操作

std::basic_istream<CharT,Traits>::putback

来自 cppreference.cn
< cpp‎ | io‎ | basic istream
 
 
 
 
basic_istream& putback( char_type ch );

将字符 ch 放回输入流,以便下一个提取的字符将是 ch

首先清除 eofbit,然后表现为 UnformattedInputFunction。在构造和检查 sentry 对象之后,如果 rdbuf() 不为空,则调用 rdbuf()->sputbackc(ch),这将调用 rdbuf()->pbackfail(ch) 如果 ch 不等于最近提取的字符。

如果 rdbuf() 为空,或者如果 rdbuf->sputbackc(ch) 返回 Traits::eof(),则调用 setstate(badbit)

在任何情况下,都将 gcount() 计数器设置为零。

目录

[编辑] 参数

ch - 要放入输入流的字符

[编辑] 返回值

*this

[编辑] 异常

failure 如果发生错误(错误状态标志不是 goodbit)且 exceptions() 设置为针对该状态抛出异常。

如果内部操作抛出异常,则会捕获该异常并设置 badbit。如果为 badbit 设置了 exceptions(),则会重新抛出该异常。

[编辑] 示例

演示修改和非修改 putback() 之间的区别。

#include <iostream>
#include <sstream>
 
int main()
{
    std::stringstream s1("Hello, world"); // IO stream
    s1.get();
    if (s1.putback('Y')) // modifies the buffer
        std::cout << s1.rdbuf() << '\n';
    else
        std::cout << "putback failed\n";
 
    std::cout << "--\n";
 
    std::istringstream s2("Hello, world"); // input-only stream
    s2.get();
    if (s2.putback('Y')) // cannot modify input-only buffer
        std::cout << s2.rdbuf() << '\n';
    else
        std::cout << "putback failed\n"; 
    s2.clear();
 
    std::cout << "--\n";
 
    if (s2.putback('H')) // non-modifying 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> 的公共成员函数) [编辑]
撤销提取一个字符
(公共成员函数) [编辑]
读取下一个字符但不提取它
(公共成员函数) [编辑]