Namespaces
Variants

std:: to_string

From cppreference.net
std::basic_string
헤더 파일에 정의됨 <string>
std:: string to_string ( int value ) ;
(1) (C++11부터)
std:: string to_string ( long value ) ;
(2) (C++11부터)
std:: string to_string ( long long value ) ;
(3) (C++11부터)
std:: string to_string ( unsigned value ) ;
(4) (C++11부터)
std:: string to_string ( unsigned long value ) ;
(5) (C++11부터)
std:: string to_string ( unsigned long long value ) ;
(6) (C++11부터)
std:: string to_string ( float value ) ;
(7) (C++11부터)
std:: string to_string ( double value ) ;
(8) (C++11부터)
std:: string to_string ( long double value ) ;
(9) (C++11부터)

숫자 값을 std::string 으로 변환합니다.

buf 를 변환 함수의 내부 버퍼로 설정하며, 변환 결과를 담기에 충분히 크게 합니다.

1) 부호 있는 정수를 문자열로 변환합니다. 변환 방식은 std:: sprintf ( buf, "%d" , value ) 과 동일합니다.
2) 부호 있는 정수를 문자열로 변환합니다. 변환 방식은 std:: sprintf ( buf, "%ld" , value ) 과 동일합니다.
3) 부호 있는 정수를 문자열로 변환합니다. 변환 방식은 std:: sprintf ( buf, "%lld" , value ) 과 동일합니다.
4) 부호 없는 정수를 문자열로 변환합니다. 변환 방식은 std:: sprintf ( buf, "%u" , value ) 과 동일합니다.
5) 부호 없는 정수를 문자열로 변환합니다. 변환 방식은 std:: sprintf ( buf, "%lu" , value ) 과 동일합니다.
6) 부호 없는 정수를 문자열로 변환합니다. 변환 방식은 std:: sprintf ( buf, "%llu" , value ) 과 동일합니다.
7,8) 부동 소수점 값을 문자열로 변환합니다. 변환 방식은 std:: sprintf ( buf, "%f" , value ) 과 동일합니다.
9) 부동 소수점 값을 문자열로 변환합니다. 변환 방식은 std:: sprintf ( buf, "%Lf" , value ) 과 동일합니다.
(C++26 이전)
1-9) 숫자 값을 문자열로 변환합니다. 변환 방식은 std:: format ( "{}" , value ) 과 동일합니다.
(C++26 이후)

목차

매개변수

value - 변환할 숫자 값

반환값

변환된 값을 담고 있는 문자열.

예외

std::bad_alloc 생성자로부터 std::string 예외를 발생시킬 수 있습니다.

참고 사항

  • 부동 소수점 타입의 경우 std::to_string 는 반환된 문자열의 유효 숫자 자릿수가 0일 수 있어 예상치 못한 결과를 초래할 수 있습니다. 예제를 참조하십시오.
  • 반환값이 기본적으로 std::cout 이 출력하는 값과 크게 다를 수 있습니다. 예제를 참조하십시오.
  • std::to_string 는 형식 지정을 위해 현재 C 로캘에 의존하므로, 여러 스레드에서 std::to_string 을 동시에 호출할 경우 호출이 부분적으로 직렬화될 수 있습니다.
    • 정수형에 대한 오버로드의 결과는 현재 C 로캘에 의존하지 않으므로, 구현체들은 일반적으로 정확성과 성능 모두를 위해 이러한 오버로드에서 현재 C 로캘 접근을 회피합니다. 그러나 이러한 회피는 표준에 의해 보장되지는 않습니다.
(C++26까지)

C++17은 더 높은 성능의 로케일 독립적 대안으로 std::to_chars 를 제공합니다.

Feature-test 매크로 표준 기능
__cpp_lib_to_string 202306L (C++26) std::to_string std::format 기반으로 재정의

예제

#include <cstdio>
#include <format>
#include <initializer_list>
#include <iostream>
#include <string>
#if __cpp_lib_to_string >= 202306L
constexpr auto revision() { return " (post C++26)"; }
#else
constexpr auto revision() { return " (pre C++26)"; }
#endif
int main()
{
    for (const double f : {1.23456789555555, 23.43, 1e-9, 1e40, 1e-40, 123456789.0})
    {
        std::cout << "to_string:\t" << std::to_string(f) << revision() << '\n';
        // C++26 이전에는 std::to_string의 출력이 std::printf와 일치합니다.
        std::printf("printf:\t\t%f\n", f);
        // C++26부터는 std::to_string의 출력이 std::format과 일치합니다.
        std::cout << std::format("format:\t\t{}\n", f);
        std::cout << "std::cout:\t" << f << "\n\n";
    }
}

가능한 출력:

to_string:      1.234568 (pre C++26)
printf:         1.234568
format:         1.23456789555555
std::cout:      1.23457
to_string:      23.430000 (pre C++26)
printf:         23.430000
format:         23.43
std::cout:      23.43
to_string:      0.000000 (pre C++26)
printf:         0.000000
format:         1e-09
std::cout:      1e-09
to_string:      10000000000000000303786028427003666890752.000000 (pre C++26)
printf:         10000000000000000303786028427003666890752.000000
format:         1e+40
std::cout:      1e+40
to_string:      0.000000 (pre C++26)
printf:         0.000000
format:         1e-40
std::cout:      1e-40
to_string:      123456789.000000 (pre C++26)
printf:         123456789.000000
format:         123456789
std::cout:      1.23457e+08

참고 항목

(C++11)
정수 또는 부동 소수점 값을 wstring 으로 변환
(함수)
(C++11) (C++11)
문자열을 부호 없는 정수로 변환
(함수)
(C++11) (C++11) (C++11)
문자열을 부호 있는 정수로 변환
(함수)
(C++11) (C++11) (C++11)
문자열을 부동 소수점 값으로 변환
(함수)
(C++17)
정수 또는 부동 소수점 값을 문자 시퀀스로 변환
(함수)