- string[meta header]
- std[meta namespace]
- function[meta id-type]
- cpp11[meta cpp]
namespace std {
string to_string(int val); // (1) C++11
constexpr string to_string(int val); // (1) C++26
string to_string(unsigned int val); // (2) C++11
constexpr string to_string(unsigned int val); // (2) C++26
string to_string(long val); // (3) C++11
constexpr string to_string(long val); // (3) C++26
string to_string(unsigned long val); // (4) C++11
constexpr string to_string(unsigned long val); // (4) C++26
string to_string(long long val); // (5) C++11
constexpr string to_string(long long val); // (5) C++26
string to_string(unsigned long long val); // (6) C++11
constexpr string to_string(unsigned long long val); // (6) C++26
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
}- string[link basic_string.md]
数値valをstring型文字列に変換する。
- (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);
- format[link /reference/format/format.md]
#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;
}- std::to_string[color ff0000]
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;
}- digits10[link /reference/limits/numeric_limits/digits10.md]
- max_exponent10[link /reference/limits/numeric_limits/max_exponent10.md]
- C++11
- Clang: 3.0 [mark verified]
- GCC: 4.5.4 [mark verified]
- ICC: ?
- Visual C++: 2010 [mark verified], 2012 [mark verified], 2013 [mark verified], 2015 [mark verified], 2017 [mark verified]
- 2010は、不完全な実装。以下の型のみ多重定義されている。
long longunsigned long longlong double
- 2010は、不完全な実装。以下の型のみ多重定義されている。
| 名前 | 参照 |
|---|---|
to_wstring |
数値をwstringに変換する |
to_chars |
ロケール依存しない高速な変換 |
- N2408 Simple Numeric Access Revision 2
- P2587R3
to_stringor notto_string- C++26から
sprintfベースの仕様をやめてstd::format()ベースの仕様になった
- C++26から
- P3391R2
constexpr std::format- C++26から整数バージョンが
constexprに対応した
- C++26から整数バージョンが