【发布时间】:2017-01-07 17:36:02
【问题描述】:
C++11 引入了std::to_string,所以我看了一下一个实现:它在内部调用vsnprintf。好吧,但是为什么总是将size参数设置为类型大小的4倍呢?
inline string
to_string(int __val)
{ return __gnu_cxx::__to_xstring<string>(&std::vsnprintf, 4 * sizeof(int),
"%d", __val); }
inline string
to_string(unsigned __val)
{ return __gnu_cxx::__to_xstring<string>(&std::vsnprintf,
4 * sizeof(unsigned),
"%u", __val); }
inline string
to_string(long __val)
{ return __gnu_cxx::__to_xstring<string>(&std::vsnprintf, 4 * sizeof(long),
"%ld", __val); }
【问题讨论】:
-
它将创建一个足够大的缓冲区来容纳字符串以及所有大小的 int 的尾随零,从 1 开始。
-
免费评论:在我看来,他们真的应该使用
sizeof __val。 -
@unwind 没有必要,因为 to_string 对于类型 T 是重载的。