命名空间
变体
操作

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

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

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

首先清除 eofbit,然后像 UnformattedInputFunction 一样执行。在构造和检查哨兵对象后,如果 rdbuf() 不为空,则调用 rdbuf()->sputbackc(ch),如果 ch 不等于最近提取的字符,则调用 rdbuf()->pbackfail(ch)

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

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

内容

[编辑] 参数

ch - 要放入输入流的字符

[编辑] 返回值

*this

[编辑] 异常

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

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

[编辑] 示例

演示修改和非修改 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

[编辑] 另请参阅

将一个字符放回输入序列
(std::basic_streambuf<CharT,Traits> 的公共成员函数) [编辑]
取消提取一个字符
(公共成员函数) [编辑]
读取下一个字符而不提取它
(公共成员函数) [编辑]