Namespaces
Variants

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

From cppreference.net
class sentry ;

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

목차

멤버 함수

(constructor)
sentry 객체를 생성합니다. 모든 준비 작업이 여기서 수행됩니다
(public member function)
(destructor)
필요 시 서식이 지정된 출력 후 또는 예외 발생 후 스트림 객체를 완료합니다
(public member function)
operator=
할당 연산자가 삭제되었습니다
(public member function)
operator bool
스트림 객체의 준비가 성공적으로 완료되었는지 확인합니다
(public member function)

std::basic_ostream::sentry:: sentry

explicit sentry ( std:: basic_ostream < CharT, Traits > & os ) ;

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

만약 os. good ( ) false 이면, 반환합니다. 그렇지 않고 os. tie ( ) 이 null 포인터가 아니면, os. tie ( ) - > flush ( ) 을 호출하여 출력 시퀀스를 외부 스트림과 동기화합니다. 준비 과정 중 생성자는 setstate ( failbit ) 를 호출할 수 있습니다 (이는 std::ios_base::failure 를 던질 수 있습니다).

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

매개변수

os - 준비할 출력 스트림

예외

std::ios_base::failure 파일 끝 조건이 발생한 경우.


std::basic_ostream::sentry:: ~sentry

~sentry ( ) ;

만약 ( os. flags ( ) & std:: ios_base :: unitbuf ) && ! std:: uncaught_exception ( ) && os. good ( ) ) true 이면, os. rdbuf ( ) - > pubsync ( ) 를 호출합니다. 만약 해당 함수가 - 1 을 반환하면, 예외를 전파하지 않고 os. rdstate ( ) badbit 을 설정합니다.


std::basic_ostream::sentry:: operator bool

explicit operator bool ( ) const ;

출력 스트림 준비가 성공적으로 완료되었는지 확인합니다.

매개변수

(없음)

반환값

true 출력 스트림 준비가 성공한 경우, false 그렇지 않은 경우.

예제

#include <iostream>
#include <sstream>
struct Foo
{
    char n[6];
};
std::ostream& operator<<(std::ostream& os, Foo& f)
{
    std::ostream::sentry s(os);
    if (s)
        os.write(f.n, 5);
    return os;
}
int main()
{
    Foo f = {"abcde"};
    std::cout << f << '\n';
}

출력:

abcde

결함 보고서

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

DR 적용 대상 게시된 동작 수정된 동작
LWG 397 C++98 소멸자가 os. flush ( ) 를 호출할 수 있으며, 이는 예외를 발생시킬 수 있음 예외가 전파되지 않음
LWG 442 C++98 operator bool const 로 선언되지 않음 (하지만 시놉시스 에서는 const 임) const 추가됨
LWG 835 C++98 os unitbuf 를 설정한 경우, 소멸자가 os. flush ( ) 를 호출하게 되며,
이는 UnformattedOutputFunction 이고 또 다른 sentry 객체를 생성함
(해당 소멸자가 또 다른 sentry 객체를 생성하고 이 과정이 반복됨)
대신 이 경우
os. rdbuf ( ) - > pubsync ( )
를 호출함

참고 항목

형식화된 데이터 삽입
(public member function)