Какие гарантии дает стандарт C++ для сужения преобразования от double до int?

Какие гарантии дает стандарт C++ для сужения преобразования типов double в типы int? Это то же самое, что и Java, как описано в Q31328190:


person StephenD    schedule 04.01.2016    source источник


Ответы (1)


Нет, это не то же самое, что в Java. Если математический результат «усечения дробной части» не может быть представлен целевым типом, поведение не определено.

Из 4.9 [conv.fpint]/1 ("Преобразование с плавающей запятой"):

Значение prvalue типа с плавающей запятой может быть преобразовано в значение prvalue целочисленного типа. Преобразование усекается; то есть дробная часть отбрасывается. Поведение не определено, если усеченное значение не может быть представлено в целевом типе.

person Kerrek SB    schedule 04.01.2016
comment
Это просто означает, что целочисленный тип должен быть достаточно большим, чтобы вместить усеченное значение. По сути, вы хотите, чтобы поплавок находился между std::numeric_limits<int>::min() и std::numeric_limits<int>::max(). Для всего остального есть модульные тесты :D - person user3427419; 04.01.2016