¿Por qué no hay std:: stou?
C++11 agregó algunas nuevas funciones de conversión de cadenas:
Http://en.cppreference.com/w/cpp/string/basic_string/stoul
Incluye stoi (string to int), stol (string to long), stoll (string to long long), stoul (string to unsigned long), stoull (string to unsigned long long). Notable en su ausencia es una función stou (string to unsigned). ¿Hay alguna razón por la que no es necesario pero todos los demás lo son?
Relacionado: No " sto{corto, corto sin signo}" funciones en C++11?
2 answers
La respuesta más pat sería que la biblioteca de C no tiene "strtou
" correspondiente, y las funciones de cadena de C++11 son todas envolturas ligeramente veladas alrededor de las funciones de la biblioteca de C: Las funciones std::sto*
espejo strto*
, y las funciones std::to_string
usan sprintf
.
Editar: Como KennyTM señala, tanto stoi
como stol
usan strtol
como la función de conversión subyacente, pero todavía es misterioso por qué mientras existe stoul
que usa strtoul
, no hay stou
correspondiente.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-01-04 14:38:31
No tengo idea de por qué existe stoi
pero no stou
, pero la única diferencia entre stoul
y un hipotético stou
sería una comprobación de que el resultado está en el rango de unsigned
:
unsigned stou(std::string const & str, size_t * idx = 0, int base = 10) {
unsigned long result = std::stoul(str, idx, base);
if (result > std::numeric_limits<unsigned>::max()) {
throw std::out_of_range("stou");
}
return result;
}
(Del mismo modo, stoi
también es similar a stol
, solo que con una verificación de rango diferente; pero como ya existe, no hay necesidad de preocuparse por exactamente cómo implementarlo.)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-01-03 17:37:38