variable to_string stol stoi not from declared convertir c++ c++11 stdstring

c++ - stol - to_string is not a member of std



¿Por qué la implementación de std:: to_string crea un búfer 4 veces el tamaño del tipo? (1)

C ++ 11 introduce std::to_string , así que eché un vistazo a una implementación: llama a vsnprintf internamente. Está bien, pero ¿por qué siempre establece el parámetro de tamaño como 4 veces el tamaño del tipo?

inline string to_string(int __val) { return __gnu_cxx::__to_xstring<string>(&std::vsnprintf, 4 * sizeof(int), "%d", __val); } inline string to_string(unsigned __val) { return __gnu_cxx::__to_xstring<string>(&std::vsnprintf, 4 * sizeof(unsigned), "%u", __val); } inline string to_string(long __val) { return __gnu_cxx::__to_xstring<string>(&std::vsnprintf, 4 * sizeof(long), "%ld", __val); }


El número máximo de dígitos binarios de un valor N-decimal es el valor máximo de (N * log (10) / log (2)). Un solo dígito decimal necesita ceil (3.32) dígitos binarios, es decir 4.

Para tamaños de 8 bits es:

Decimals = ceil(8 * Size / 3.32) = ceil(2.41 * Size).

Para el letrero (sobrecarga y asignación) obtienes:

Decimals = 4 * Size.

Nota: Una conversión con snprintf de un solo signo firmado necesita 5 bytes (incluido el signo y el cero de finalización). Para valores con un tamaño mayor que un byte, Decimals = 4 * Size proporciona un resultado, que es lo suficientemente grande.