std::vprint_nonunicode
std::vprint_nonunicode (로케일 없는 형식화 출력 삽입)
이미 포맷된(형식 문자열로부터 만들어진) 인자들을 os 스트림에 삽입하는 함수예요. 유니코드가 아닌 일반 로케일 환경용이에요. C++23부터 있어요.
출처: cppreference
본문
<ostream> 헤더에 정의돼 있고, std::vformat의 출력 스트림 버전이에요.
void vprint_nonunicode( std::ostream& os,
std::string_view fmt, std::format_args args );
FormattedOutputFunction처럼 동작해요(단, 오류 보고의 일부 세부 사항은 다를 수 있어요). 다음 연산을 순서대로 수행해요.
- 먼저 sentry 객체를 만들고 검사해요.
- 그런 다음
std::string out = std::vformat(os.getloc(), fmt, args);처럼 자동 변수를 초기화해요. - 마지막으로 문자 시퀀스
[out.begin(), out.end())를os에 삽입해요.
C++26부터 os에 문자를 쓴 뒤 관찰 가능한 체크포인트(observable checkpoint)를 설정해요.
매개변수
os: 데이터를 삽입할 출력 스트림.fmt: 형식 문자열.args: 포맷할 인자들.
형식 문자열은 std::format과 동일한 문법을 따라요. 각 replacement field는 { arg-id (optional) } 또는 { arg-id (optional) : format-spec } 형식이며, arg-id는 로케일 지정 문법을 따르고 format-spec은 인자 타입에 따라 해석돼요.
예외
- 할당 실패 시
std::bad_alloc. - 어떤 formatter가 던지는 예외(예:
std::format_error)는os.exceptions()값과 무관하게 전파돼요. os로의 삽입이 실패하면 호출되는os.setstate(ios_base::badbit)때문에 생기는ios_base::failure를 던질 수 있어요.
참고
피처 테스트 매크로 __cpp_lib_print(값 202207L, C++23, Formatted output)와 __cpp_lib_format(값 202207L, C++23, std::basic_format_string 노출)이 있어요.
std::vprint_unicode와 달리 이 함수는 로케일을 유니코드로 가정하지 않고, 일반 문자 인코딩 환경에 맞춰 동작해요. std::print가 내부적으로 롬케일 인코딩이 UTF-8이 아닐 때 이 함수를 사용해요.