c++ - libreria - ¿Por qué no hay std:: stou?
string c++ libreria (2)
La respuesta más fácil sería que la biblioteca C no tiene un " strtou
" correspondiente, y las funciones de cadena C ++ 11 son simplemente envoltorios apenas velados alrededor de las funciones de la biblioteca C. Las funciones std::sto*
mirror strto*
, y el std::to_string
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 sigue siendo misterioso por qué mientras exista stoul
que use strtoul
, no hay stou
correspondiente.
C ++ 11 agregó algunas nuevas funciones de conversión de cadenas:
http://en.cppreference.com/w/cpp/string/basic_string/stoul
Incluye stoi (string a int), stol (string a long), stoll (string a long long), stoul (string a unsigned long), stoull (string a unsigned long long). Notable en su ausencia es una función stou (cadena a sin firmar). ¿Hay alguna razón por la que no se necesita pero todos los demás sí?
related: ¿ No hay funciones "sto {short, unsigned short}" en C ++ 11?
No tengo idea de por qué stoi
existe, pero no stou
, pero la única diferencia entre stoul
y un stou
hipotético sería un control 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 con una comprobación de rango diferente, pero como ya existe, no hay necesidad de preocuparse sobre cómo implementarlo exactamente).