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이 아닐 때 이 함수를 사용해요.

더 알아보기 (Learn more)

cppreference