Namespaces
Variants

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

From cppreference.net
basic_istream & putback ( char_type ch ) ;

문자 ch 를 입력 스트림에 다시 넣어서 다음에 추출될 문자가 ch 가 되도록 합니다.

먼저 eofbit 을 지운 다음, UnformattedInputFunction 으로 동작합니다. sentry 객체를 구성하고 검사한 후, rdbuf() 가 null이 아니면 rdbuf ( ) - > sputbackc ( ch ) 를 호출하며, 이는 rdbuf ( ) - > pbackfail ( ch ) 를 호출합니다. 단, ch 가 가장 최근에 추출된 문자와 같지 않은 경우에 한합니다.

만약 rdbuf() 가 null이거나 rdbuf - > sputbackc ( ch ) Traits :: eof ( ) 를 반환하면, setstate ( badbit ) 를 호출합니다.

어떤 경우든, gcount() 카운터를 0으로 설정합니다.

목차

매개변수

ch - 입력 스트림에 넣을 문자

반환값

* this

예외

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

내부 연산에서 예외가 발생하면, 해당 예외는 포착되고 badbit 이 설정됩니다. 만약 exceptions() 에서 badbit 가 설정되어 있다면, 예외가 재발생됩니다.

예제

수정(modifying)과 비수정(non-modifying) 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> 의 public member function)
문자 추출을 취소함
(public member function)
추출하지 않고 다음 문자를 읽음
(public member function)