utility_to_chars_result
utility_to_chars_result (문자 변환 결과 타입)
이 페이지는 std::to_chars_result 타입에 대해 설명해요. 이 타입은 std::to_chars의 반환 타입으로, 변환된 문자열의 끝을 가리키는 포인터와 오류 코드를 함께 담고 있어요. C++17부터 사용할 수 있으며, C++26에서는 성공 여부를 직접 확인할 수 있는 operator bool이 추가되었어요.
출처: cppreference
본문
<charconv> 헤더에 정의되어 있어요.
| 정의된 헤더 | <charconv> |
|
|---|---|---|
struct to_chars_result; |
(C++17부터) |
std::to_chars_result는 std::to_chars의 반환 타입이에요. 기본 클래스가 없으며, 다음 멤버만 가지고 있어요.
데이터 멤버
| 멤버 이름 | 정의 |
|---|---|
ptr |
char* 타입의 포인터 (공개 멤버 객체) |
ec |
std::errc 타입의 오류 코드 (공개 멤버 객체) |
멤버 및 friend 함수
operator== (std::to_chars_result)
friend bool operator==(const to_chars_result&, const to_chars_result&) = default; |
(C++20부터) |
|---|
두 인자를 기본 비교 방식으로 비교해요. 이때 ptr과 ec를 각각 operator==로 비교해요.
이 함수는 일반적인 비한정 또는 한정 조회로는 보이지 않으며, 인자에 std::to_chars_result가 연관 클래스로 포함된 경우에만 인자 종속 조회(ADL)로 찾을 수 있어요.
!= 연산자는 operator==로부터 합성돼요.
operator bool
constexpr explicit operator bool() const noexcept; |
(C++26부터) |
|---|
변환이 성공했는지 확인해요. ec == std::errc{}를 반환해요.
참고 사항
| 기능 테스트 매크로 | 값 | 표준 | 기능 |
|---|---|---|---|
__cpp_lib_to_chars |
201611L |
(C++17) | 기본 문자열 변환 (std::to_chars, std::from_chars) |
202306L |
(C++26) | <charconv> 함수의 성공 또는 실패 테스트 |
예제
#include <array>
#include <charconv>
#include <iostream>
#include <string_view>
#include <system_error>
void show_to_chars(auto... format_args)
{
std::array<char, 10> str;
#if __cpp_lib_to_chars >= 202306L and __cpp_structured_bindings >= 202406L
// use C++26 structured bindings declaration as condition (P0963)
// and C++26 to_chars_result::operator bool() for error checking (P2497)
if (auto [ptr, ec] =
std::to_chars(str.data(), str.data() + str.size(), format_args...))
std::cout << std::string_view(str.data(), ptr) << '\n';
else
std::cout << std::make_error_code(ec).message() << '\n';
#elif __cpp_lib_to_chars >= 202306L
// use C++26 to_chars_result::operator bool() for error checking (P2497)
if (auto result =
std::to_chars(str.data(), str.data() + str.size(), format_args...))
std::cout << std::string_view(str.data(), result.ptr) << '\n';
else
std::cout << std::make_error_code(result.ec).message() << '\n';
#else
// fallback to C++17 if-with-initializer and structured bindings
if (auto [ptr, ec] =
std::to_chars(str.data(), str.data() + str.size(), format_args...);
ec == std::errc())
std::cout << std::string_view(str.data(), ptr - str.data()) << '\n';
else
std::cout << std::make_error_code(ec).message() << '\n';
#endif
}
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
같이 보기
to_chars (C++17) |
정수 또는 부동소수점 값을 문자 시퀀스로 변환해요 (함수) [편집] |
|---|