Namespaces
Variants

std:: vformat

From cppreference.net
헤더 파일에 정의됨 <format>
(1) (C++20부터)
(2) (C++20부터)
(3) (C++20부터)
(4) (C++20부터)

args 에 보관된 인수들을 형식 문자열 fmt 에 따라 포맷하고, 결과를 문자열로 반환합니다. 존재하는 경우, loc 은 로케일별 포맷팅에 사용됩니다.

목차

매개변수

fmt - 포맷 문자열을 나타내는 객체. 포맷 문자열은 다음으로 구성됩니다:
  • 일반 문자( { } 제외), 출력에 변경 없이 복사됩니다,
  • 이스케이프 시퀀스 { { } } , 출력에서 각각 { } 로 대체됩니다, 그리고
  • 치환 필드.

각 치환 필드는 다음 형식을 가집니다:

{ arg-id (optional) } (1)
{ arg-id (optional) : format-spec } (2)
1) 포맷 명세가 없는 치환 필드
2) 포맷 명세가 있는 치환 필드
arg-id - 포맷팅에 사용될 인수의 args 내 인덱스를 지정합니다; 생략된 경우 인수는 순서대로 사용됩니다.

포맷 문자열 내 arg-id 들은 모두 존재하거나 모두 생략되어야 합니다. 수동 인덱싱과 자동 인덱싱을 혼합하는 것은 오류입니다.

format-spec - 해당 인수에 대한 std::formatter 특수화에 의해 정의된 포맷 명세. } 로 시작할 수 없습니다.

(C++23부터)
(C++26부터)
  • 다른 포맷 가능 타입의 경우, 포맷 명세는 사용자 정의 formatter 특수화에 의해 결정됩니다.
args - 포맷팅될 인수들
loc - std::locale 로케일별 포맷팅에 사용되는 로케일

반환값

형식화된 결과를 담고 있는 문자열 객체.

예외

std::format_error 를 발생시킵니다 - 만약 fmt 가 제공된 인자들에 대한 유효한 형식 문자열이 아닌 경우, 또는 std::bad_alloc 을 발생시킵니다 - 할당 실패 시. 또한 포매터나 반복자 연산에서 발생하는 모든 예외를 전파합니다.

예제

#include <format>
#include <iostream>
template<typename... Args>
inline void println(const std::format_string<Args...> fmt, Args&&... args)
{
    std::cout << std::vformat(fmt.get(), std::make_format_args(args...)) << '\n';
}
int main()
{
    println("{}{} {}{}", "Hello", ',', "C++", -1 + 2 * 3 * 4);
}

출력:

Hello, C++23

참고 항목