mid libreria library from example clase biblioteca c++ string c++11 std

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