Namespaces
Variants

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

From cppreference.net
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

异常

failure if an error occurred (the error state flag is not goodbit ) and exceptions() is set to throw for that state.

如果内部操作抛出异常,该异常会被捕获并设置 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> 的公开成员函数)
取消提取字符
(公开成员函数)
读取下一字符但不提取
(公开成员函数)