如http://ideone.com/RdINqa所示,std::stoul
不会为负数投掷std::out_of_range
,而是将其包裹。为什么是这样?似乎-4不在unsigned long
类型的范围内,所以应该抛出。std :: stoul为什么会转换负数?
10
A
回答
10
21.5数值转换
unsigned long stoul(const string& str, size_t *idx = 0, int base = 10);
效果: ...叫[秒]
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
的值。为什么这样指定,我不知道。
相关问题
- 1. 为什么std :: make_tuple将std :: reference_wrapper参数转换为X&?
- 2. C++ 98替代std :: stoul?
- 3. 为什么C++ 11不会将lambdas转换为std :: function对象?
- 4. 为什么转换为参考会干扰转换为bool?
- 5. 为什么转换numpy uint8会创建负值?
- 6. 为什么这个std :: bind没有转换成std :: function?
- 7. 为什么Javascript minifiers会将===转换为==?
- 8. 为什么这会被转换为int?
- 9. 为什么转换函数不能使用std :: string?
- 10. 为什么不将std ::数组转换为std :: string的代码不会显示任何内容?
- 11. 十进制转换为分数不会为负数
- 12. 为什么sqlite会转换。到,
- 13. 为什么会出现转换问题
- 14. 为什么boost :: format不能直接转换为std :: string?
- 15. 为什么String.Format将正斜杠转换为负号?
- 16. 为什么将带符号的负数转换为无符号数?
- 17. 为什么我会收到错误:无法将'std :: string {aka std :: basic_string <char>}'转换为'char *'赋值?
- 18. 为什么将Int32转换为Float64会导致数据更改?
- 19. 为什么parseInt()不会将“true”转换为数字,而相乘?
- 20. 为什么std :: future不会阻止
- 21. 为什么std :: distance会打印一个`-`?
- 22. 为什么std :: search需要转发iters
- 23. 为什么to_java方法将Java中的整数(会是什么)转换为Long?
- 24. 为什么这会使用std ::的变换原因EXC_BAD_ACCESS
- 25. 负数ASCII转换
- 26. 为什么JavaScript转换它,它是什么将它转换为?
- 27. 无法将参数3从'std :: vector <_Ty> *'转换为'Inventory *'。为什么?
- 28. 将小数转换为负数?
- 29. 将负数天数转换为0?
- 30. 为什么std :: istream_iterator忽略换行符?
谢谢,这很烦人 – Kal