为什么数字类型只有`to_string()`?

for*_*818 5 c++ string tostring c++11

我只是知道C++有一个std::to_string()定义的<string>.现在我想知道为什么to_string()只适用于数字类型.有什么特别的原因,为什么没有更普遍的原因

template <typename T>
std::string to_string(const T& t);
Run Code Online (Sandbox Code Playgroud)

可以像这样实现:

template <typename T>
std::string to_string(const T& t) {
    std::ostringstream s;
    s << t;
    return s.str();
}
Run Code Online (Sandbox Code Playgroud)

我怀疑,这样一般to_string不存在的,因为它很容易写你自己的,但同样的道理也适用于to_string()服用int,double

Som*_*ken 4

因为std::to_string()要求。

正如标准所述:

string to_string(int val);

string to_string(unsigned val);

string to_string(long val);

string to_string(unsigned long val);

string to_string(long long val);

string to_string(unsigned long long val);

string to_string(float val);

string to_string(double val);

string to_string(long double val);

返回:每个函数返回一个字符串对象,其中保存其参数值的字符表示形式,该参数值将通过使用格式说明符“%d”、“%u”、“%ld”调用 sprintf(buf, fmt, val) 生成分别为 "、"%lu"、"%lld"、"%llu"、"%f"、"%f" 或 "%Lf",其中buf 指定足够大小的内部字符缓冲区。

编写一个可以确定需要使用的说明符的模板化函数std::sprintf会使事情变得不必要的复杂。