3

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运算符。

4

1 回答 1

0

要计算整数类型的最长可表示值,您可以使用sizeof以下示例:

在 32 位系统最大值中unsigned long需要10数字,加上负号符号-和 1 个字节\0,它至少需要12字节。所以,我认为下面的表达式是一个很好的估计:

4 * sizeof(unsigned long) // = 16

 

对于float价值观,这是不正确的。在这里,max_exponent10很有用:

std::numeric_limits::max_exponent10 的值是最大正数 n,使得 10n 是浮点类型 T 的可表示有限值。

于 2013-10-25T18:50:28.650 回答