C++ named requirements: UnformattedOutputFunction
From cppreference.net
C++
C++ named requirements
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
요구사항
UnformattedOutputFunction 은 다음을 수행하는 스트림 출력 함수입니다:
1)
자동 저장 기간을 가진
basic_ostream::sentry
타입의 객체를 생성하며, 이는 다음을 수행합니다:
-
출력 스트림에
eofbit
또는
badbit
이 설정된 경우,
failbit
도 함께 설정합니다. 그리고 이 출력 스트림의
exception mask
에서
failbit에 대한 예외가 활성화된 경우( ( exceptions ( ) & failbit ) ! = 0 ), ios_base::failure 를 throw합니다. - 해당되는 경우 tie()된 출력 스트림을 flush합니다.
2)
전송된 센트리(sentry)의 상태를
sentry::operator bool()
을 호출하여 확인합니다. 이는
basic_ios::good
과 동일합니다.
- 연산자가 false 를 반환하거나 센트리의 생성자가 예외를 발생시키면 출력이 수행되지 않습니다.
- 연산자가 true 를 반환하면, rdbuf ( ) - > sputc ( ) 을 호출하는 것처럼 출력 스트림에 문자를 삽입하여 원하는 출력을 수행하려 시도합니다. std::basic_ostream 의 다른 public 멤버들도 사용될 수 있지만, overflow() , xsputn() , sync() 를 제외한 rdbuf ( ) 의 가상 멤버들은 절대 호출되지 않습니다.
-
-
출력 중 예외가 발생하면 출력 스트림의
badbit을 설정합니다. 이 스트림의 예외 마스크 에서badbit에 대한 예외가 활성화된 경우( ( exceptions ( ) & badbit ) ! = 0 ), 예외는 다시 발생됩니다. - 예외가 발생하지 않으면 함수에서 지정된 값을 반환합니다.
-
출력 중 예외가 발생하면 출력 스트림의
3)
어떤 경우든, 예외로 종료되든 반환으로 종료되든, 센트리(sentry)의 소멸자는 이 함수를 떠나기 전에 호출됩니다.
표준 라이브러리
다음 표준 라이브러리 함수들은 UnformattedOutputFunction s 입니다.
- basic_ostream::operator<< (basic_streambuf*)
- basic_ostream::put
- basic_ostream::write
- basic_ostream::flush
|
(C++11 이후) |
결함 보고서
다음의 동작 변경 결함 보고서들은 이전에 발표된 C++ 표준에 소급 적용되었습니다.
| DR | 적용 대상 | 게시된 동작 | 올바른 동작 |
|---|---|---|---|
| LWG 63 | C++98 | 예외 처리 정책이 누락됨 | 추가됨 |
| LWG 160 | C++98 |
포착된 예외가 재발생되는지 결정하는 과정에서
존재하지 않는 함수
exception()
를 언급함
|
exceptions() 로 수정됨 |
| LWG 165 | C++98 |
rdbuf
(
)
에서 호출이 허용된
유일한 가상 멤버 함수는
overflow()
였음
|
xsputn()
과
sync()
도 허용됨
|