如图所示 http://ideone.com/RdINqa, std::stoul
不投掷 std::out_of_range
对于负数,但包裹它们。为什么是这样?似乎-4超出了该类型的范围 unsigned long
所以它应该抛出。
如图所示 http://ideone.com/RdINqa, std::stoul
不投掷 std::out_of_range
对于负数,但包裹它们。为什么是这样?似乎-4超出了该类型的范围 unsigned long
所以它应该抛出。
21.5 数字转换
unsigned long stoul(const string& str, size_t *idx = 0, int base = 10);
功效: ...叫[S]
strtoul(str.c_str(), ptr, base)
...返回转换后的结果(如果有的话)。抛出: ...
out_of_range
如果转换后的值超出了返回类型的可表示值范围。
这里的“转换值”是返回的值 strtoul
。当然,这是类型 unsigned long
因此不能超出返回类型的可表示值范围 stoul
,这也是 unsigned long
。
据我所知,只有 stoi
可以扔 out_of_range
,因为它返回 int
但用途 strtol
返回 long
。
此外,C标准指定的方式 strtoul
,它需要接受字符串 "-4"
并返回一个等于的值 -(unsigned long)4
。我不知道为什么用这种方式指定。
21.5 数字转换
unsigned long stoul(const string& str, size_t *idx = 0, int base = 10);
功效: ...叫[S]
strtoul(str.c_str(), ptr, base)
...返回转换后的结果(如果有的话)。抛出: ...
out_of_range
如果转换后的值超出了返回类型的可表示值范围。
这里的“转换值”是返回的值 strtoul
。当然,这是类型 unsigned long
因此不能超出返回类型的可表示值范围 stoul
,这也是 unsigned long
。
据我所知,只有 stoi
可以扔 out_of_range
,因为它返回 int
但用途 strtol
返回 long
。
此外,C标准指定的方式 strtoul
,它需要接受字符串 "-4"
并返回一个等于的值 -(unsigned long)4
。我不知道为什么用这种方式指定。