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個字節,但這不是其值範圍的度量。 –