std:: to_chars
|
헤더에 정의됨
<charconv>
|
||
|
std
::
to_chars_result
to_chars
(
char
*
first,
char
*
last,
|
(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,
|
(4) | (C++17부터) |
|
std
::
to_chars_result
to_chars
(
char
*
first,
char
*
last,
/* floating-point-type */
value,
|
(5) | (C++17부터) |
value
값을
[
first
,
last
)
범위를 연속적으로 채워 문자 문자열로 변환합니다. 여기서
[
first
,
last
)
는
유효한 범위
여야 합니다.
10..35
범위(포함)의 숫자는 소문자
a..z
로 표현됩니다. 값이 0보다 작으면 표현은 마이너스 기호로 시작합니다. 라이브러리는 모든 cv-한정되지 않은 부호 있는/없는 정수 타입과
char
타입에 대한
value
매개변수 타입으로의 오버로드를 제공합니다.
std::to_chars
는 결과가 허용될 경우
"false"
/
"true"
가 아닌
"0"
/
"1"
이 되기 때문에
bool
타입의 인수를 거부합니다.
목차 |
매개변수
| 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
에 추가 멤버가 있을 수 있음
|
추가 멤버가 허용되지 않음 |
참고 항목
|
(C++17)
|
std::to_chars
의 반환 타입
(클래스) |
|
(C++17)
|
문자 시퀀스를 정수 또는 부동 소수점 값으로 변환
(함수) |
|
(C++11)
|
정수 또는 부동 소수점 값을
string
으로 변환
(함수) |
|
(C++11)
|
형식화된 출력을
stdout
, 파일 스트림 또는 버퍼에 출력
(함수) |
|
형식화된 데이터를 삽입
(
std::basic_ostream<CharT,Traits>
의 공개 멤버 함수)
|