Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么std::stoul转换负数?_C++_C++11 - Fatal编程技术网

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
的值。我不知道为什么会这样