Pourquoi n’y a-t-il pas std :: stou?

C ++ 11 a ajouté de nouvelles fonctions de conversion de chaîne:

http://fr.cppreference.com/w/cpp/ssortingng/basic_ssortingng/stoul

Il comprend stoi (ssortingng à int), stol (ssortingng à long), stoll (ssortingng à long long), stoul (chaîne à unsigned long), stoull (chaîne à unsigned long long). Notable en son absence est une fonction stou (ssortingng to unsigned). Y a-t-il une raison pour laquelle ce n’est pas nécessaire mais toutes les autres sont?

related: Pas de “sto {short, unsigned short}” fonctions en C ++ 11?

La réponse la plus évidente serait que la bibliothèque C n’a pas de « strtou » correspondant, et que les fonctions de chaîne C ++ 11 ne sont que des enveloppes à peine voilées autour des fonctions de la bibliothèque C: Les fonctions std::sto* miroir std::to_ssortingng fonctions std::to_ssortingng utilisent sprintf .


Edit: Comme le fait remarquer KennyTM, stoi et stol utilisent tous deux strtol comme fonction de conversion sous-jacente, mais il est toujours mystérieux que, s’il existe des stoul qui utilisent strtoul , il n’y a pas de stou correspondant.

Je n’ai aucune idée de la raison stoi laquelle stoi existe mais pas de stou , mais la seule différence entre stoul et un hypothétique stou serait de vérifier que le résultat est dans la gamme des unsigned :

 unsigned stou(std::ssortingng const & str, size_t * idx = 0, int base = 10) { unsigned long result = std::stoul(str, idx, base); if (result > std::numeric_limits::max()) { throw std::out_of_range("stou"); } return result; } 

(De même, stoi est également similaire à stol , avec une vérification de plage différente, mais comme il existe déjà, il n’y a pas lieu de s’inquiéter de la manière de l’implémenter.)