16

http://ideone.com/RdINqa所示,std::stoul不会std::out_of_range为负数抛出 a,而是将它们包裹起来。为什么是这样?似乎 -4 超出了类型的范围,unsigned long所以它应该抛出。

4

1 回答 1

15

21.5数值转换

unsigned long stoul(const string& str, size_t *idx = 0, int base = 10);

效果: ...call[s] strtoul(str.c_str(), ptr, base)... 返回转换后的结果,如果有的话。

抛出: ...out_of_range如果转换后的值超出返回类型的可表示值范围。

这里的“转换后的值”是返回的值strtoul。当然,它属于类型unsigned long,因此不能超出返回类型的可表示值的范围stoul,它也是unsigned long.

据我所知,只能stoithrow out_of_range,因为它返回int但使用strtolwhich 返回long

此外,按照 C 标准规定的方式strtoul,要求接受字符串"-4"并返回等于 的值-(unsigned long)4。为什么这样指定,我不知道。

于 2013-10-11T22:13:32.053 回答