При стандартных настройках cout будет выведено 5.8=5=4. Преобразование double в int отбрасывает дробную часть, а дальнейшее деление выполняется как целочисленное.
Определение вывода при неявном преобразовании типов
При стандартных настройках cout будет выведено 5.8=5=4. Преобразование double в int отбрасывает дробную часть, а дальнейшее деление выполняется как целочисленное.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Необходимо предсказать, какой результат появится в консоли после выполнения следующего кода:
double d = 5.8;
int i = d;
cout << d << "=" << i << "=" << (i / 2 * 2);
Ответ
При стандартных настройках cout будет выведено 5.8=5=4. Преобразование double в int отбрасывает дробную часть, а дальнейшее деление выполняется как целочисленное.
d остаётся 5.8, тогда как i становится 5. Выражение i / 2 * 2 группируется слева направо: сначала 5 / 2 даёт 2, затем умножение на 2 даёт 4.
Обратное умножение не восстанавливает потерянный остаток. Для вещественного деления нужен вещественный операнд, например i / 2.0 * 2; это уже другой результат. Преобразование в int допустимо лишь при представимом целочисленном результате.