Namespaces
Variants

std:: formatted_size

From cppreference.net
헤더에 정의됨 <format>
template < class ... Args >
std:: size_t formatted_size ( std:: format_string < Args... > fmt, Args && ... args ) ;
(1) (C++20부터)
template < class ... Args >
std:: size_t formatted_size ( std:: wformat_string < Args... > fmt, Args && ... args ) ;
(2) (C++20부터)
template < class ... Args >

std:: size_t formatted_size ( const std:: locale & loc,

std:: format_string < Args... > fmt, Args && ... args ) ;
(3) (C++20부터)
template < class ... Args >

std:: size_t formatted_size ( const std:: locale & loc,

std:: wformat_string < Args... > fmt, Args && ... args ) ;
(4) (C++20부터)

형식 문자열 fmt 에 따라 args 를 포매팅하여 형식화된 문자열의 총 문자 수를 결정합니다. loc 이 존재할 경우, 로케일별 포매팅에 사용됩니다.

다음의 경우 동작은 정의되지 않습니다: std:: formatter < std:: remove_cvref_t < Ti > , CharT > BasicFormatter 요구사항을 만족하지 않는 경우, 여기서 Ti Args 내의 임의의 타입입니다.

목차

매개변수

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

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

{ arg-id (선택 사항) } (1)
{ arg-id (선택 사항) : format-spec } (2)
1) 포맷 명세 없음 치환 필드
2) 포맷 명세 포함 치환 필드
arg-id - 포맷팅에 사용될 args 내 인자의 인덱스를 지정합니다; 생략 시 인자는 순서대로 사용됩니다.

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

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

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

반환값

서식이 지정된 문자열의 총 문자 수입니다.

예외

formatter에 의해 발생된 모든 예외를 전파합니다.

예제

#include <format>
#include <iomanip>
#include <iostream>
#include <string_view>
#include <vector>
int main()
{
    using namespace std::literals::string_view_literals;
    constexpr auto fmt_str{"Hubble's H{0} {1} {2:*^4} miles/sec/mpc."sv};
    constexpr auto sub_zero{"\N{SUBSCRIPT ZERO}"sv}; // "₀" or {0342, 130, 128}
    constexpr auto aprox_equ{"\N{APPROXIMATELY EQUAL TO}"sv}; // "≅" or {0342, 137, 133}
    constexpr int Ho{42}; // H₀
    const auto min_buffer_size{std::formatted_size(fmt_str, sub_zero, aprox_equ, Ho)};
    std::cout << "Min buffer size = " << min_buffer_size << '\n';
    // Use std::vector as dynamic buffer. The buffer does not include the trailing '\0'.
    std::vector<char> buffer(min_buffer_size);
    std::format_to_n(buffer.data(), buffer.size(), fmt_str, sub_zero, aprox_equ, Ho);
    std::cout << "Buffer: "
              << std::quoted(std::string_view{buffer.data(), min_buffer_size})
              << '\n';
    // Print the buffer directly after adding the trailing '\0'.
    buffer.push_back('\0');
    std::cout << "Buffer: " << std::quoted(buffer.data()) << '\n';
}

출력:

Min buffer size = 37
Buffer: "Hubble's H₀ ≅ *42* miles/sec/mpc."
Buffer: "Hubble's H₀ ≅ *42* miles/sec/mpc."

결함 보고서

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

DR 적용 대상 게시된 동작 올바른 동작
P2216R3 C++20 잘못된 형식 문자열에 대해 std::format_error 를 발생시킴 잘못된 형식 문자열은 컴파일 타임 오류를 발생시킴
P2418R2 C++20 const-usable도 복사 가능하지도 않은 객체
(예: 생성기형 객체)는 포맷팅 불가능
이러한 객체의 포맷팅 허용
P2508R1 C++20 이 기능에 대한 사용자 가시적 이름이 없음 basic_format_string 이름이 노출됨

참고 항목

(C++20)
출력 반복자를 통해 인수의 형식화된 표현을 기록합니다
(함수 템플릿)
출력 반복자를 통해 인수의 형식화된 표현을 기록하며, 지정된 크기를 초과하지 않음
(함수 템플릿)