如http://ideone.com/RdINqa所示,std::stoul
不会std::out_of_range
为负数抛出 a,而是将它们包裹起来。为什么是这样?似乎 -4 超出了类型的范围,unsigned long
所以它应该抛出。
问问题
2809 次
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
.
据我所知,只能stoi
throw out_of_range
,因为它返回int
但使用strtol
which 返回long
。
此外,按照 C 标准规定的方式strtoul
,要求接受字符串"-4"
并返回等于 的值-(unsigned long)4
。为什么这样指定,我不知道。
于 2013-10-11T22:13:32.053 回答