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

履歴 編集

function
<string>

std::to_string(C++11)

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 ロケール依存しない高速な変換

参照