Namespaces
Variants

std:: to_chars

From cppreference.net
헤더에 정의됨 <charconv>
std :: to_chars_result

to_chars ( char * first, char * last,

/* integer-type */ value, int base = 10 ) ;
(1) (C++17부터)
(C++23부터 constexpr)
std :: to_chars_result
to_chars ( char * , char * , bool , int = 10 ) = delete ;
(2) (C++17부터)
std :: to_chars_result
to_chars ( char * first, char * last, /* floating-point-type */ value ) ;
(3) (C++17부터)
std :: to_chars_result

to_chars ( char * first, char * last, /* floating-point-type */ value,

std:: chars_format fmt ) ;
(4) (C++17부터)
std :: to_chars_result

to_chars ( char * first, char * last, /* floating-point-type */ value,

std:: chars_format fmt, int precision ) ;
(5) (C++17부터)

value 값을 [ first , last ) 범위를 연속적으로 채워 문자 문자열로 변환합니다. 여기서 [ first , last ) 유효한 범위 여야 합니다.

1) 정수 포매터: value 는 주어진 base 에서 숫자 문자열로 변환됩니다(불필요한 선행 영은 제외). 10..35 범위(포함)의 숫자는 소문자 a..z 로 표현됩니다. 값이 0보다 작으면 표현은 마이너스 기호로 시작합니다. 라이브러리는 모든 cv-한정되지 않은 부호 있는/없는 정수 타입과 char 타입에 대한 value 매개변수 타입으로의 오버로드를 제공합니다.
2) bool 에 대한 오버로드는 삭제되었습니다. std::to_chars 는 결과가 허용될 경우 "false" / "true" 가 아닌 "0" / "1" 이 되기 때문에 bool 타입의 인수를 거부합니다.
3) value 는 기본("C") 로케일에서 std::printf 스타일의 문자열로 변환됩니다. 변환 지정자는 f 또는 e 중 가장 짧은 표현을 요구사항에 따라 선택됩니다(동점일 경우 f 가 우선함): 문자열 표현은 기수점 앞에 최소 한 자리의 숫자가 존재하고(있는 경우) 해당 std::from_chars 함수를 사용하여 표현을 파싱하면 값을 정확히 복원할 수 있는 최소한의 문자 수로 구성됩니다. 이러한 표현이 여러 개 있는 경우, value 와의 차이가 가장 작은 표현이 선택되며, 남은 동점은 std::round_to_nearest 에 따른 반올림으로 해결됩니다. 라이브러리는 모든 cv-한정자 없는 표준 (C++23까지) 부동 소수점 타입에 대한 매개변수 value 의 타입으로 오버로드를 제공합니다.
4) (3) 과 동일하지만, as-if printf에 지정된 변환은 다음과 같습니다: f ( fmt std::chars_format::fixed 인 경우), e ( fmt std::chars_format::scientific 인 경우), a (단, 결과에 선행 "0x" 없음) ( fmt std::chars_format::hex 인 경우), 그리고 g ( fmt chars_format::general 인 경우). 라이브러리는 모든 cv-비한정 표준 (C++23까지) 부동소수점 타입에 대한 오버로드를 value 매개변수의 타입으로 제공합니다.
5) (4) 와 동일하지만, 정밀도가 최단 표현 요구사항이 아닌 매개변수 precision 에 의해 지정됩니다. 라이브러리는 표준 (C++23 이전) 부동소수점 타입들에 대한 모든 cv-unqualified 오버로드를 매개변수 value 의 타입으로 제공합니다.

목차

매개변수

first, last - 기록할 문자 범위
value - 문자열 표현으로 변환할 값
base - 사용할 정수 진법: 2에서 36 사이의 값(포함)
fmt - 사용할 부동 소수점 형식, std::chars_format 타입의 비트마스크
precision - 사용할 부동 소수점 정밀도

반환값

성공 시, std::to_chars_result 타입의 값을 반환하며, ec 는 값 초기화된 std::errc 와 같고 ptr 은 기록된 문자들의 끝 다음을 가리키는 포인터입니다. 문자열이 NUL로 종료되지 않음 에 유의하십시오.

오류 발생 시, std::to_chars_result 타입의 값을 반환하며, std::errc::value_too_large ec 에 저장하고, last 값의 사본을 ptr 에 저장하며, 범위 [ first , last ) 의 내용을 지정되지 않은 상태로 둡니다.

예외

아무것도 던지지 않습니다.

참고 사항

C++ 및 C 라이브러리의 다른 포맷팅 함수들과 달리, std::to_chars 는 로케일 독립적이며, 메모리 할당을 하지 않고, 예외를 발생시키지 않습니다. 다른 라이브러리들(예: std::sprintf )에서 사용되는 포맷팅 정책들의 작은 부분집합만 제공됩니다. 이는 JSON이나 XML과 같은 텍스트 기반 교환 환경에서 일반적으로 사용되는 고처리량 상황에서 가능한 가장 빠른 구현을 허용하기 위함입니다.

std::from_chars std::to_chars 에 의해 형식화된 모든 부동 소수점 값을 정확히 복원할 수 있다는 보장은 두 함수가 동일한 구현체에서 제공된 경우에만 적용됩니다.

bool 값을 "0" / "1" 로 포맷하려면 std::to_chars 를 사용할 때 값을 다른 정수 타입으로 캐스팅해야 합니다.

기능 테스트 매크로 표준 기능
__cpp_lib_to_chars 201611L (C++17) 기본 문자열 변환 ( std::to_chars , std::from_chars )
202306L (C++26) <charconv> 함수의 성공 또는 실패 테스트
__cpp_lib_constexpr_charconv 202207L (C++23) 정수 타입에 대한 std::to_chars std::from_chars 오버로드 ( 1 ) constexpr 수식어 추가

예제

#include <charconv>
#include <iomanip>
#include <iostream>
#include <string_view>
#include <system_error>
void show_to_chars(auto... format_args)
{
    const size_t buf_size = 10;
    char buf[buf_size]{};
    std::to_chars_result result = std::to_chars(buf, buf + buf_size, format_args...);
    if (result.ec != std::errc())
        std::cout << std::make_error_code(result.ec).message() << '\n';
    else
    {
        std::string_view str(buf, result.ptr - buf);
        std::cout << std::quoted(str) << '\n';
    }
}
int main()
{
    show_to_chars(42);
    show_to_chars(+3.14159F);
    show_to_chars(-3.14159, std::chars_format::fixed);
    show_to_chars(-3.14159, std::chars_format::scientific, 3);
    show_to_chars(3.1415926535, std::chars_format::fixed, 10);
}

가능한 출력:

"42"
"3.14159"
"-3.14159"
"-3.142e+00"
Value too large for defined data type

결함 보고서

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

DR 적용 대상 게시된 동작 수정된 동작
LWG 2955 C++17 이 함수는 <utility> 헤더에 있었으며 std::error_code 를 사용함 <charconv> 로 이동되었으며 std::errc 를 사용함
LWG 3266 C++17 bool 인수가 허용되었으며 int 로 승격됨 삭제된 오버로드에 의해 거부됨
LWG 3373 C++17 std::to_chars_result 에 추가 멤버가 있을 수 있음 추가 멤버가 허용되지 않음

참고 항목

std::to_chars 의 반환 타입
(클래스)
(C++17)
문자 시퀀스를 정수 또는 부동 소수점 값으로 변환
(함수)
(C++11)
정수 또는 부동 소수점 값을 string 으로 변환
(함수)
형식화된 출력을 stdout , 파일 스트림 또는 버퍼에 출력
(함수)
형식화된 데이터를 삽입
( std::basic_ostream<CharT,Traits> 의 공개 멤버 함수)