C++11 具有to_string
函数。在后台,它使用 vsnprintf
将值写入 char 缓冲区。然后,这用于初始化返回的字符串。由于vsnprintf
需要正在使用的缓冲区的大小,因此会计算并传入。
对于确切的类型,大小使用 sizeof
计算。例如,对于unsigned long
计算是 4 * sizeof(unsigned long)
。
但是对于浮点类型,它的计算方式不同。在这种情况下,所需缓冲区的大小在内部使用
__gnu_cxx::__numeric_traits<float>::__max_exponent10 + 20
我认为这只是一种内部库的写作方式
std::numeric_limits<float>::max_exponent10 + 20
我的问题是,为什么以这种方式计算大小?为什么他们不能只使用sizeof
运算符。
要计算整型的最长可表示值是多少,可以使用sizeof
如下例所示:
在32位系统中,unsigned long
的最大值需要10
位数字,加上负号符号-
和一个字节的