[英]Allocating char buffer to hold textual representation for float
C ++ 11具有to_string
函数。 它在vsnprintf
使用vsnprintf
将值写入char缓冲区。 然后,将其用于初始化返回的字符串。 由于vsnprintf
需要使用的缓冲区大小,因此将对其进行计算并传递。
对于确切的类型,使用sizeof
计算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
数字,加上负号符号-
和\\0
一个字节,则至少需要12
个字节。 因此,我认为下面的表达式是一个很好的估计:
4 * sizeof(unsigned long) // = 16
对于float
值,这是不正确的。 在这里, max_exponent10
非常有用:
std :: numeric_limits :: max_exponent10的值是最大的正数n,因此10n是浮点类型T的可表示的有限值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.