C++ 11具有to_string
函数。在引擎盖下,它使用vsnprintf
将值写入字符缓冲区。然后这用于初始化返回的字符串。由于vsnprintf
需要使用的缓冲区的大小,因此计算并传入。分配char缓冲区以保存浮点文本表示
对于确切类型,大小的计算使用的是sizeof
。例如,对于unsigned long
,计算是4 * sizeof(unsigned long)
。
但是对于浮点类型,其计算方式不同。在这种情况下所需要的缓冲区的大小使用
__gnu_cxx::__numeric_traits<float>::__max_exponent10 + 20
我会以为这只是写
std::numeric_limits<float>::max_exponent10 + 20
我的问题是,为什么是大小在计算的内部库的方式内部计算这条路?为什么他们不能只使用sizeof
运营商。
类型的大小通常与它所表示的值的范围无关。例如,一个“long double”长度通常为12或16个字节,但这不是其值范围的度量。 –