为什么没有std :: stou?

C ++ 11增加了一些新的string转换函数:

http://en.cppreference.com/w/cpp/string/basic_string/stoul

它包括stoi(string到int),stol(string到long),stoll(string到long long),stoul(string到unsigned long),stoull(string到unsigned long long)。 值得注意的是stou(string to unsigned)函数。 有没有其他的理由,但其他的都是?

相关: 在C ++ 11中没有“sto {short,unsigned short}”函数?

最可能的答案是C库没有相应的“ strtou ”,C ++ 11的string函数都是C库函数的简单包装: std::sto*函数镜像strto*std::to_string函数使用sprintf


编辑:正如KennyTM指出的那样, stoistol使用strtol作为潜在的转换函数,但它仍然是神秘的,为什么在存在使用strtoul stoul ,没有相应的stou

我不知道为什么stoi存在而不是stou ,但是stoul和一个假设的stou之间唯一的区别就是检查结果是否在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; } 

(同样, stoi也类似于stol ,只是具有不同的范围检查;但是因为它已经存在,所以不必担心如何实现它。)