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).