Давайте посмотрим, что произойдет, когда вы назначите 0xfffffffff
(9 f) для unsigned int
на 64-битной машине.
#include <iostream>
int main(){
unsigned int n = 0xfffffffff; //decimal value 68719476735
std::cout << n << '\n';
}
Неявное преобразование приведет к предупреждению компилятором, но не вызовет исключение.
Тип результата stoul
равен unsigned long
, что на 64-разрядной машинедостаточно большой, чтобы вместить 0xfffffffff
, поэтому исключений не будет.