Какие гарантии дает стандарт C++ для сужения преобразования типов double в типы int? Это то же самое, что и Java, как описано в Q31328190:
Какие гарантии дает стандарт C++ для сужения преобразования от double до int?
comment
Хотя это и не спецификация, этот эталонный сайт хорошо соответствует спецификациям. Конечно, в нем есть раздел о преобразованиях с плавающей запятой в целочисленные а>.
- person Some programmer dude   schedule 04.01.2016
comment
Спасибо за напоминание об этом сайте. Однако, если я ищу Implicit, он не дает результатов. Как вы найдете что-то, если вы не знаете, где это находится, и поиск не может найти существующие страницы!
- person StephenD   schedule 05.01.2016
Ответы (1)
Нет, это не то же самое, что в Java. Если математический результат «усечения дробной части» не может быть представлен целевым типом, поведение не определено.
Из 4.9 [conv.fpint]/1 ("Преобразование с плавающей запятой"):
Значение prvalue типа с плавающей запятой может быть преобразовано в значение prvalue целочисленного типа. Преобразование усекается; то есть дробная часть отбрасывается. Поведение не определено, если усеченное значение не может быть представлено в целевом типе.
person
Kerrek SB
schedule
04.01.2016
Это просто означает, что целочисленный тип должен быть достаточно большим, чтобы вместить усеченное значение. По сути, вы хотите, чтобы поплавок находился между
std::numeric_limits<int>::min()
и std::numeric_limits<int>::max()
. Для всего остального есть модульные тесты :D
- person user3427419; 04.01.2016