std::basic_ostream<CharT,Traits>:: sentry
|
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) |