std::basic_istream<CharT,Traits>:: putback
|
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
예외
내부 연산에서 예외가 발생하면, 해당 예외는 포착되고
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) |