c++ - 为什么数字类型只有一个 `to_string()`?

标签 c++ string c++11 tostring

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

template <typename T>
std::string to_string(const T& t);

?

可以这样实现:

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

我怀疑是这样的将军to_string不存在,因为自己编写很容易,但同样的论点适用于 to_string()服用int , double

最佳答案

因为 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);

Returns: Each function returns a string object holding the character representation of the value of its argument that would be generated by calling sprintf(buf, fmt, val) with a format specifier of "%d", "%u", "%ld", "%lu", "%lld", "%llu", "%f", "%f", or "%Lf", respectively, where buf designates an internal character buffer of sufficient size.

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

关于c++ - 为什么数字类型只有一个 `to_string()`?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43400961/

相关文章:

string - 如何在 Swift 中返回所有子字符串(不止一次)?

java - 如何分离字符串

C++ - vector 迭代错误

c++ - 即时编译 C++ : clang/libtooling fails to set Triple for LLVM IR

c++ - 指针是否需要指向分配的类数组中的第一个对象才能使用 'delete [] ptrName' ?

c++ - 指向 std::thread 的共享指针是一种不好的做法吗?

swift - 字节字符串作为 Swift 4 中的数据

c++ - 优先队列自定义比较器

c++ - boost::any 的用途?

c++ - 如何推断嵌套容器值类型