为什么没有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指出的那样, stoi
和stol
使用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
,只是具有不同的范围检查;但是因为它已经存在,所以不必担心如何实现它。)