Nir*_*adi 7 c++ string-conversion
我有一个函数来检查字符串是否有效unsigned int:
unsigned long int getNum(std::string s, int base)
{
unsigned int n;
try
{
n = std::stoul(s, nullptr, base);
std::cout << errno << '\n';
if (errno != 0)
{
std::cout << "ERROR" << '\n';
}
}
catch (std::exception & e)
{
throw std::invalid_argument("Value is too big");
}
return n;
}
Run Code Online (Sandbox Code Playgroud)
0xfffffffff但是,当我输入诸如(9 f's)之类的值时,errno仍然为 0(并且不会引发异常)。为什么会这样呢?
让我们看看在 64 位机器0xfffffffff上将 (9 f's)分配给 an 时会发生什么。unsigned int
#include <iostream>
int main(){
unsigned int n = 0xfffffffff; //decimal value 68719476735
std::cout << n << '\n';
}
Run Code Online (Sandbox Code Playgroud)
隐式转换将导致编译器发出警告,但不会引发异常。
的结果类型stoul是unsigned longwhich 在 64 位机器上足够大,可以容纳 0xfffffffff,所以也不会有例外。
| 归档时间: |
|
| 查看次数: |
7149 次 |
| 最近记录: |