C++ named requirements: FormattedOutputFunction
목차 |
요구사항
FormattedOutputFunction 은 std::basic_ostream 의 멤버 함수이거나 std::basic_ostream 을 포함하는 비멤버 함수로서 다음 작업들을 수행합니다:
- sentry 타입의 객체를 생성합니다 std::basic_ostream::sentry .
- 만약 bool ( sentry ) 가 true 인 경우, rdbuf ( ) - > sputc ( ) 를 호출하는 것처럼 문자를 출력 스트림에 삽입하여 원하는 출력을 수행하려고 시도합니다. std::basic_ostream 의 다른 public 멤버들도 사용될 수 있지만, rdbuf ( ) 의 가상 멤버 중 overflow() , xsputn() , sync() 을 제외한 나머지는 절대 호출되지 않습니다.
- sentry 를 파괴하고 * this 를 반환합니다.
만약 sentry 가 생성되지 않거나 bool ( sentry ) 가 false 인 경우, 출력이 발생하지 않습니다.
출력을 생성할 수 없는 경우, setstate ( std:: ios_base :: failbit ) 를 호출하며, 이는 예외를 발생시킬 수 있습니다.
출력 중 예외가 발생하면,
std::
ios_base
::
badbit
가
*
this
의 오류 상태에 설정되며,
std::ios_base::failure
가 발생하지 않습니다. 만약 이 스트림의
예외 마스크
에서
badbit
에 대한 예외가 활성화된 경우(즉,
(
exceptions
(
)
&
badbit
)
!
=
0
), 해당 예외는 다시 발생됩니다.
서식화된 출력 함수에서 예외가 발생하면, sentry 또한 함수를 떠나기 전에 파괴됩니다.
패딩
|
서식화된 출력 함수는 패딩을 std::num_put::do_put() 단계 3에 따라 결정합니다. |
(C++14 이전) |
|
스트림 os 의 서식화된 출력 함수가 패딩을 결정하는 경우, 다음과 같이 수행합니다.
만약 ( os. flags ( ) & std:: ios_base :: adjustfield ) == std:: ios_base :: left 가 true 이면, 채움 문자가 문자 시퀀스 뒤에 배치됩니다; 그렇지 않으면 문자 시퀀스 앞에 배치됩니다. |
(C++14 이후) |
표준 라이브러리
다음 표준 라이브러리 함수들은 FormattedOutputFunction s 입니다.
- basic_ostream::operator<< (std::basic_ostream&, int / long / double / void* / bool)
- operator<< (std::basic_ostream&, char)
- operator<< (std::basic_ostream&, char*)
- operator<< (std::basic_ostream&, const std::bitset&)
- operator<< (std::basic_ostream&, const std::basic_string&)
-
operator<<, std::put_money 의 반환값에 호출될 때
| (C++17 이후) |
|
(C++23부터) |
결함 보고서
다음의 동작 변경 결함 보고서들은 이전에 발표된 C++ 표준에 소급 적용되었습니다.
| DR | 적용 대상 | 게시된 동작 | 올바른 동작 |
|---|---|---|---|
| LWG 160 | C++98 |
catch된 예외가 재 throw되는지 결정하는 과정에서
존재하지 않는 함수
exception()
를 언급함
|
exceptions() 로 수정됨 |
| LWG 165 | C++98 |
rdbuf
(
)
에서 호출이 허용된
유일한 가상 멤버 함수는
overflow()
뿐이었음
|
xsputn()
과
sync()
도 허용됨 |