Ответ на вопрос 1
По компилятору происходит потеря точности, потому что компилятор видит только, что у вас есть переменная int слева и двойное значение справа. Компилятор не настолько умен, чтобы понять, что 10.0
не потеряет точность при преобразовании в int.
Теоретически компилятор может быть скомпилирован так, чтобы компилировать это утверждение, но в этом нет реальной выгоды. Почти никто не пишет int x = 10.0
.
Ответ на вопрос 2
Действительно, потеря точности есть, но почему компилятор не жаловался? Потому что вы использовали актерский состав. Вы написали (int)
. Это вы показываете компилятору, что знаете, что делаете. Написав актерский состав, вы сообщаете ему, что знаете о возможной потере точности.