Formatting library (since C++20)
텍스트 서식 지정 라이브러리는 printf 함수 계열에 대한 안전하고 확장 가능한 대안을 제공합니다. 이는 기존 C++ I/O 스트림 라이브러리를 보완하기 위한 목적을 가지고 있습니다.
목차 |
형식 사양
형식 지정은 다양한 종류의 옵션으로 객체가 어떻게 형식화되는지 지정합니다.
기본 타입 및 표준 문자열 타입 객체의 서식 지정은 기본 형식 지정 을 사용합니다. 다른 라이브러리 구성 요소들도 자체적인 형식 지정을 제공할 수 있으며, 자세한 내용은 여기 를 참조하십시오.
서식 지정 함수
|
헤더 파일에 정의됨
<format>
|
|
|
(C++20)
|
인수의 형식화된 표현을 새 문자열에 저장함
(함수 템플릿) |
|
(C++20)
|
출력 반복자를 통해 인수의 형식화된 표현을 출력함
(함수 템플릿) |
|
(C++20)
|
출력 반복자를 통해 인수의 형식화된 표현을 지정된 크기를 초과하지 않도록 출력함
(함수 템플릿) |
|
(C++20)
|
인수의 형식화된 표현을 저장하는 데 필요한 문자 수를 결정함
(함수 템플릿) |
형식 문자열
|
헤더에 정의됨
<format>
|
|
|
(C++20)
(C++20)
(C++20)
|
생성 시점에 컴파일 타임 형식 문자열 검사를 수행하는 클래스 템플릿
(클래스 템플릿) |
|
(C++26)
|
사용자 지향 형식화 함수에서 직접 사용 가능한 런타임 형식 문자열을 생성함
(함수) |
포맷팅 개념
|
헤더 파일에 정의됨
<format>
|
|
|
(C++23)
|
특정 타입이 포맷 가능함을 지정하며, 이는
std::formatter
를 특수화하고
parse
및
format
멤버 함수를 제공함을 의미합니다
(concept) |
확장성 지원 및 구현 세부사항
|
헤더 파일에 정의됨
<format>
|
|
|
(C++20)
|
타입 삭제된 인수 표현을 사용하는
std::format
의 비템플릿 변형
(함수) |
|
(C++20)
|
타입 삭제된 인수 표현을 사용하는
std::format_to
의 비템플릿 변형
(함수 템플릿) |
|
(C++20)
(C++20)
|
모든 포맷팅 인수를 참조하는 타입 삭제된 객체를 생성하며,
format_args
로 변환 가능함
(함수 템플릿) |
|
(C++20)
(C++26에서 사용 중단됨)
|
사용자 정의 포매터를 위한 인수 방문 인터페이스
(함수 템플릿) |
|
(C++20)
|
주어진 타입에 대한 포맷팅 규칙을 정의함
(클래스 템플릿) |
|
(C++23)
|
범위 타입에 대한
std::formatter
특수화 구현을 도와주는 클래스 템플릿
(클래스 템플릿) |
|
인수 타입이 효율적으로 출력될 수 있음을 나타냄
(변수 템플릿) |
|
|
(C++23)
|
범위가 포맷팅되는 방식을 지정함
(열거형) |
|
(C++23)
|
범위에 적합한
std::range_format
을 선택함
(변수 템플릿) |
|
(C++20)
|
사용자 정의 포매터를 위한 포맷팅 인수 접근을 제공하는 클래스 템플릿
(클래스 템플릿) |
|
(C++20)
(C++20)
(C++20)
|
모든 포맷팅 인수에 대한 접근을 제공하는 클래스
(클래스 템플릿) |
|
(C++20)
(C++20)
(C++20)
|
모든 포맷팅 인수와 출력 반복자를 포함하는 포맷팅 상태
(클래스 템플릿) |
|
(C++20)
(C++20)
(C++20)
|
포맷팅 문자열 파서 상태
(클래스 템플릿) |
|
(C++20)
|
포맷팅 오류 시 발생하는 예외 타입
(클래스) |
헬퍼 항목 (since C++23)
|
template
<
class
R,
class
CharT
>
concept
/*const-formattable-range*/
=
|
(1) | ( 설명 전용* ) |
|
template
<
class
R,
class
CharT
>
using
/*fmt-maybe-const*/
=
|
(2) | ( 설명 전용* ) |
참고 사항
| 기능 테스트 매크로 | 값 | 표준 | 기능 | |
|---|---|---|---|---|
__cpp_lib_format
|
201907L
|
(C++20) | 텍스트 포매팅 | |
202106L
|
(C++23)
(DR20) |
컴파일 타임 형식 문자열 검사;
std::vformat_to 의 매개변수화 축소 |
||
202110L
|
(C++23)
(DR20) |
chrono 포매터에서 로케일 처리 수정;
비-const-포맷 가능 타입 지원 |
||
202207L
|
(C++23)
(DR20) |
std::basic_format_string
노출;
chrono 타입의 지역화된 포매팅에서 인코딩 처리 명확화 |
||
202304L
|
(C++26) | 포인터 포매팅 | ||
202305L
|
(C++26) | 형식 인자 타입 검사 | ||
202306L
|
(C++26) |
멤버
std::basic_format_arg::visit
|
||
202311L
|
(C++26) | 런타임 형식 문자열 | ||
202403L
|
(C++26) | std::println 으로 빈 줄 출력 | ||
202403L
|
(C++26)
(DR23) |
std::print
의 효율적인 구현 허용
|
||
__cpp_lib_format_ranges
|
202207L
|
(C++23) | 범위 포매팅 | |
__cpp_lib_format_path
|
202403L
|
(C++26) | std::filesystem::path 포매팅 | |
__cpp_lib_format_uchar
|
202311L
|
(C++26) | 코드 유닛을 정수로 포매팅하는 문제 수정 | |
__cpp_lib_formatters
|
202302L
|
(C++23) | std::thread::id 및 std::stacktrace 포매팅 |
우리는 의도적으로
std::basic_format_string
(
P2508
)의 추가를 결함 보고서(defect report)로 취급합니다. 공식적으로 그렇게 분류되지는 않았지만, 모든 알려진 구현체들이 이러한 구성 요소를 C++20 모드에서 사용 가능하게 만들기 때문입니다.
예제
#include <cassert> #include <format> int main() { std::string message = std::format("The answer is {}.", 42); assert(message == "The answer is 42."); }
결함 보고서
다음의 동작 변경 결함 보고서들은 이전에 발표된 C++ 표준에 소급 적용되었습니다.
| DR | 적용 대상 | 게시된 동작 | 올바른 동작 |
|---|---|---|---|
| P2418R2 | C++20 |
const-형식화 가능하지도 않고 복사 가능하지도 않은 객체들
(생성기형 객체 등)은 형식화 불가능 |
이러한 객체들의 형식화 허용
(완화된 formatter 요구사항) |
| P2508R1 | C++20 | 이 기능에 대한 사용자 가시적 이름이 없음 |
basic_format_string
이름이 노출됨
|
참고 항목
|
(C++23)
|
인수들의
형식화된
표현을 사용하여
stdout
또는 파일 스트림에 출력
(함수 템플릿) |
|
(C++23)
|
각 출력이 추가적인 개행으로 종료된다는 점을 제외하고
std::print
와 동일
(함수 템플릿) |
|
(C++23)
|
인수들의
형식화된
표현을 출력
(함수 템플릿) |