Namespaces
Variants

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

From cppreference.net
class sentry ;

basic_istream::sentry 클래스의 객체는 입력(형식화 및 비형식화 모두)을 수행하는 std::basic_istream 의 각 멤버 함수 시작 부분에서 지역 범위에 생성됩니다. 해당 생성자는 입력 스트림을 준비합니다: 스트림이 이미 실패 상태인지 확인하고, tie()된 출력 스트림들을 플러시하며, noskipws 플래그가 설정되지 않은 경우 선행 공백을 건너뛰고, 필요한 경우 기타 구현 정의 작업을 수행합니다. 필요한 모든 정리 작업은 소멸자에서 수행되므로, 입력 중 예외가 발생하더라도 정리 작업이 수행됨이 보장됩니다.

목차

멤버 타입

traits_type Traits

멤버 함수

(constructor)
sentry 객체를 생성합니다. 모든 준비 작업이 여기서 수행됩니다
(public member function)
(destructor)
필요 시 서식화된 입력 후 또는 예외 발생 후 스트림 객체를 마무리합니다
(public member function)
operator=
[deleted]
복사 할당 불가
(public member function)
operator bool
스트림 객체 준비가 성공적으로 완료되었는지 확인합니다
(public member function)

std::basic_istream::sentry:: sentry

explicit sentry ( std:: basic_istream < CharT, Traits > & is, bool noskipws = false ) ;

스트림을 형식화된 입력을 위해 준비합니다.

만약 is. good ( ) false 라면, is. setstate ( std:: ios_base :: failbit ) 을 호출하고 반환합니다. 그렇지 않고 is. tie ( ) 이 null 포인터가 아니라면, is. tie ( ) - > flush ( ) 을 호출하여 출력 시퀀스를 외부 스트림과 동기화합니다. is. tie ( ) 의 put 영역이 비어있는 경우 이 호출은 생략될 수 있습니다. 구현은 flush ( ) 호출을 is. rdbuf ( ) - > underflow ( ) 호출이 발생할 때까지 지연시킬 수 있습니다. 만약 sentry 객체가 파괴되기 전에 이러한 호출이 발생하지 않으면, flush 호출은 완전히 생략될 수 있습니다.

만약 noskipws 가 0이고 is. flags ( ) & std:: ios_base :: skipws 이 0이 아니라면, 이 함수는 다음 사용 가능한 문자가 공백 문자가 아닐 때까지(현재 is 에 설정된 로캘에 의해 결정됨) 모든 공백 문자를 추출하고 버립니다. 만약 is. rdbuf ( ) - > sbumpc ( ) 이나 is. rdbuf ( ) - > sgetc ( ) traits :: eof ( ) 를 반환하면, 함수는 setstate ( std:: ios_base :: failbit | std:: ios_base :: eofbit ) 을 호출합니다(이는 std::ios_base::failure 를 throw할 수 있습니다).

구현에 따라 추가적인 준비 작업이 수행될 수 있으며, 이는 setstate ( std:: ios_base :: failbit ) 을 호출할 수 있습니다(이는 std::ios_base::failure 를 throw할 수 있습니다).

준비가 완료된 후 is. good ( ) == true 라면, 이후의 operator bool 호출은 true 를 반환합니다.

매개변수

is - 준비할 입력 스트림
noskipws - true 이면 공백을 건너뛰지 않음

예외

std::ios_base::failure - 공백을 건너뛸 때 파일 끝 조건이 발생하는 경우

std::basic_istream::sentry:: ~sentry

~sentry ( ) ;

아무 작업도 수행하지 않습니다.

std::basic_istream::sentry:: operator bool

explicit operator bool ( ) const ;

입력 스트림 준비가 성공적으로 이루어졌는지 확인합니다.

매개변수

(없음)

반환값

true 입력 스트림 초기화가 성공한 경우, false 그렇지 않은 경우.

예제

#include <iostream>
#include <sstream>
struct Foo
{
    char n[5];
};
std::istream& operator>>(std::istream& is, Foo& f)
{
    std::istream::sentry s(is);
    if (s)
        is.read(f.n, 5);
    return is;
}
int main()
{
    std::string input = "   abcde";
    std::istringstream stream(input);
    Foo f;
    stream >> f;
    std::cout.write(f.n, 5);
    std::cout << '\n';
}

출력:

abcde

결함 보고서

다음의 동작 변경 결함 보고서들은 이전에 발표된 C++ 표준에 소급 적용되었습니다.

DR 적용 대상 게시된 동작 올바른 동작
LWG 195 C++98 생성자가 eofbit 을 설정하는지 여부가 불분명했음 명확히 규정됨
LWG 419 C++98 생성자가 eofbit 이 설정된 경우 failbit 을 설정하지 않았음 이 경우 failbit 을 설정함

참고 항목

형식화된 데이터 추출
(public member function)
문자 및 문자 배열 추출
(function template)