Namespaces
Variants

C++ named requirements: FormattedOutputFunction

From cppreference.net
C++ named requirements

목차

요구사항

FormattedOutputFunction std::basic_ostream 의 멤버 함수이거나 std::basic_ostream 을 포함하는 비멤버 함수로서 다음 작업들을 수행합니다:

  1. sentry 타입의 객체를 생성합니다 std::basic_ostream::sentry .
  2. 만약 bool ( sentry ) true 인 경우, rdbuf ( ) - > sputc ( ) 를 호출하는 것처럼 문자를 출력 스트림에 삽입하여 원하는 출력을 수행하려고 시도합니다. std::basic_ostream 의 다른 public 멤버들도 사용될 수 있지만, rdbuf ( ) 의 가상 멤버 중 overflow() , xsputn() , sync() 을 제외한 나머지는 절대 호출되지 않습니다.
  3. 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 의 서식화된 출력 함수가 패딩을 결정하는 경우, 다음과 같이 수행합니다.

CharT 문자 시퀀스 seq 가 주어졌을 때, 여기서 CharT os 문자 컨테이너 타입 입니다. seq 의 길이가 os. width ( ) 보다 작은 경우, os. fill ( ) 의 복사본이 필요한 만큼 이 시퀀스에 추가되어 os. width ( ) 문자 너비로 패딩됩니다.

만약 ( os. flags ( ) & std:: ios_base :: adjustfield ) == std:: ios_base :: left true 이면, 채움 문자가 문자 시퀀스 뒤에 배치됩니다; 그렇지 않으면 문자 시퀀스 앞에 배치됩니다.

(C++14 이후)

표준 라이브러리

다음 표준 라이브러리 함수들은 FormattedOutputFunction s 입니다.

(C++17 이후)
단, 다음 예외가 적용됩니다 ( os 가 출력 스트림 객체라고 가정할 때):
  • std::vformat 호출에서 발생한 모든 예외는 os. exceptions ( ) 의 값과 관계없이 전파되며, os 의 오류 상태에서 ios_base::badbit 를 설정하지 않습니다;
  • os 에 삽입이 실패할 경우, os. setstate ( ios_base :: badbit ) 를 호출합니다 ( ios_base::failure 를 발생시킬 수 있음).
(C++23부터)

결함 보고서

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

DR 적용 대상 게시된 동작 올바른 동작
LWG 160 C++98 catch된 예외가 재 throw되는지 결정하는 과정에서
존재하지 않는 함수 exception() 를 언급함
exceptions() 로 수정됨
LWG 165 C++98 rdbuf ( ) 에서 호출이 허용된
유일한 가상 멤버 함수는 overflow() 뿐이었음
xsputn() sync()
도 허용됨