C ++ std :: stoul не вызывает исключения - PullRequest
0 голосов
/ 01 октября 2018

У меня есть функция, чтобы проверить, является ли строка допустимой(и не исключение не выбрасывается).Почему это так?

1 Ответ

0 голосов
/ 01 октября 2018

Давайте посмотрим, что произойдет, когда вы назначите 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, поэтому исключений не будет.

...