• Class / Function / Type

      std::
    • Header file

      <>
    • Other / All

    最終更新日時(UTC):
    が更新

    履歴 編集

    function
    <string>

    std::to_string

    namespace std {
      string to_string(int val);                // (1) C++11
      string to_string(unsigned int val);       // (2) C++11
      string to_string(long val);               // (3) C++11
      string to_string(unsigned long val);      // (4) C++11
      string to_string(long long val);          // (5) C++11
      string to_string(unsigned long long val); // (6) C++11
      string to_string(float val);              // (7) C++11
      string to_string(double val);             // (8) C++11
      string to_string(long double val);        // (9) C++11
    }
    

    概要

    数値valstring型文字列に変換する。

    • (1) : int型の値をstring型に変換する
    • (2) : unsigned int型の値をstring型に変換する
    • (3) : long型の値をstring型に変換する
    • (4) : unsigned long型の値をstring型に変換する
    • (5) : long long型の値をstring型に変換する
    • (6) : unsigned long long型の値をstring型に変換する
    • (7) : float型の値をstring型に変換する
    • (8) : double型の値をstring型に変換する
    • (9) : long double型の値をstring型に変換する

    戻り値

    • C++11まで 各数値型に対して、sprintf(buf, fmt, val)によって生成された文字列のstringオブジェクトを返す。使用されるバッファサイズは未規定

      各型で使用されるフォーマットは以下のようになる:

      フォーマット
      int "%d"
      unsigned int "%u"
      long "%ld"
      unsigned long "%lu"
      long long "%lld"
      unsigned long long "%llu"
      float "%f"
      double "%f"
      long double "%Lf"
    • C++26から

      return format("{}", val);
      

    #include <iostream>
    #include <string>
    
    int main()
    {
      std::string s1 = std::to_string(123);
      std::cout << s1 << std::endl;
    
      std::string s2 = std::to_string(3.14);
      std::cout << s2 << std::endl;
    }
    

    出力

    123
    3.140000
    

    実装例

    #include <cstdio>
    #include <string>
    #include <limits>
    
    std::string to_string(int val)
    {
      char buffer[std::numeric_limits<int>::digits10 + 1
              + 2]; // '-' + '\0'
      std::sprintf(buffer, "%d", val);
      return buffer;
    }
    
    std::string to_string(unsigned int val)
    {
      char buffer[std::numeric_limits<unsigned int>::digits10 + 1
              + 1]; // '\0'
      std::sprintf(buffer, "%u", val);
      return buffer;
    }
    
    std::string to_string(long val)
    {
      char buffer[std::numeric_limits<long>::digits10 + 1
              + 2]; // '-' + '\0'
      std::sprintf(buffer, "%ld", val);
      return buffer;
    }
    
    std::string to_string(unsigned long val)
    {
      char buffer[std::numeric_limits<unsigned long>::digits10 + 1
              + 1]; // '\0'
      std::sprintf(buffer, "%lu", val);
      return buffer;
    }
    
    std::string to_string(long long int val)
    {
      char buffer[std::numeric_limits<long long int>::digits10 + 1
              + 2]; // '-' + '\0'
      std::sprintf(buffer, "%lld", val);
      return buffer;
    }
    
    std::string to_string(unsigned long long int val)
    {
      char buffer[std::numeric_limits<unsigned long long int>::digits10 + 1
              + 1]; // '\0'
      std::sprintf(buffer, "%llu", val);
      return buffer;
    }
    
    std::string to_string(float val)
    {
      char buffer[std::numeric_limits<float>::max_exponent10 + 1
              + 6   // fixed precision (printf's default)
              + 3]; // '-' + '.' + '\0'
      std::sprintf(buffer, "%f", val);
      return buffer;
    }
    
    std::string to_string(double val)
    {
      char buffer[std::numeric_limits<double>::max_exponent10 + 1
              + 6   // fixed precision (printf's default)
              + 3]; // '-' + '.' + '\0'
      std::sprintf(buffer, "%f", val);
      return buffer;
    }
    
    std::string to_string(long double val)
    {
      char buffer[std::numeric_limits<long double>::max_exponent10 + 1
              + 6   // fixed precision (printf's default)
              + 3]; // '-' + '.' + '\0'
      std::sprintf(buffer, "%Lf", val);
      return buffer;
    }
    

    バージョン

    言語

    • C++11

    処理系

    • Clang: 3.0
    • GCC: 4.5.4
    • ICC: ?
    • Visual C++: 2010 , 2012 , 2013 , 2015 , 2017
      • 2010は、不完全な実装。以下の型のみ多重定義されている。
        • long long
        • unsigned long long
        • long double

    関連項目

    名前 参照
    to_wstring 数値をwstringに変換する
    to_chars ロケール依存しない高速な変換

    参照