C++ 为什么std::stoul转换负数?
如中所示,C++ 为什么std::stoul转换负数?,c++,c++11,C++,C++11,如中所示,std::stoul不会为负数抛出std::out_of_range,而是将其环绕。为什么会这样?似乎-4超出了类型unsigned long的范围,所以它应该抛出 21.5数字转换 unsigned long stoul(常量字符串&str,size\t*idx=0,int-base= 10); 效果:…调用strtool(str.c_str(),ptr,base)。。。返回转换后的结果(如果有) 如果转换的值超出返回类型的可表示值范围,则抛出:…超出范围 “转换值”这里是由strt
std::stoul
不会为负数抛出std::out_of_range
,而是将其环绕。为什么会这样?似乎-4超出了类型unsigned long
的范围,所以它应该抛出
21.5数字转换
unsigned long stoul(常量字符串&str,size\t*idx=0,int-base=
10);代码>
效果:…调用strtool(str.c_str(),ptr,base)
。。。返回转换后的结果(如果有)
如果转换的值超出返回类型的可表示值范围,则抛出:…超出范围
“转换值”这里是由strtoul
返回的值。当然,它的类型是无符号长
,因此不能超出返回类型stoul
的可表示值范围,也就是无符号长
据我所知,只有stoi
可以将抛出范围之外,因为它返回int
,但使用strtol
返回long
此外,C标准指定strtoul的方式要求接受字符串“-4”
,并返回一个等于-(无符号长)4
的值。我不知道为什么会这样