Является ли литье бесконечности (представленным float) целым числом a undefined поведение?
В стандарте говорится:
4.10 Плавающие интегральные преобразования
Значение типа с плавающей запятой может быть преобразовано в prvalue целочисленный тип. Преобразование усекает; то есть дробная часть отбрасывается. Поведение undefined, если усеченное значение не может быть представлены в типе назначения.
но я не могу сказать, охватывает ли "усеченное значение невозможно" бесконечность.
Я пытаюсь понять, почему std::numeric_limits<int>::infinity()
и static_cast<int>(std::numeric_limits<float>::infinity() )
имеют разные результаты.
#include <iostream>
#include <limits>
int main ()
{
std::cout << std::numeric_limits<int>::infinity () << std::endl;
std::cout << static_cast<int> (std::numeric_limits<float>::infinity () ) << std::endl;
return 0;
}
Вывод:
0
-2147483648
Результат std::numeric_limits<int>::infinity()
четко определен и равен 0
, но я не могу найти никакой информации о бесконечности кастинга.