Что произойдет, если я приведу 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,

Другие вопросы по тегам