Что произойдет, если я приведу double к int, но значение double выходит за пределы диапазона?
Что произойдет, если я приведу double к int, но значение double выходит за пределы диапазона?
Допустим, я делаю что-то подобное?
double d = double(INT_MIN) - 10000.0;
int a = (int)d;
Какова стоимость? Это неопределенно?
2 ответа
Решение
Точно. Цитата из Стандарта, 4.9, "Поведение не определено, если усеченное значение не может быть представлено в типе назначения".
Дэвид Торнли уже полностью ответил на этот вопрос. Однако, чтобы справиться с этой ситуацией в вашем коде, вам следует рассмотреть numeric_cast для boost.
double d = double(INT_MIN) - 10000.0;
int a = boost::numeric_cast<int>(d);
Это вызовет исключение во время выполнения, если d
слишком велик для int
,