Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Здесь, на мой взгляд, всё очевидно. Переменная типа int занимает 2 байта, а переменная типа long занимает 4 байта. Понятно, что если в long-переменной записано слишком большое по модулю значение, что при преобразовании long=>int произойдёт некорректность. Будьте к этому готовы, проверяйте перед преобразованием. Вот и всё.
Кстати, тут не всё так просто с целочисленными конверсиями. Если раньше поведение зависило от реализации:
то начиная с С++20 правило примерно такое: если тип-приёмник(s) меньше источника(i), то в приёмник попадает i % 2^n, где n - количество бит в приёмнике. Т.е. 2147483647 % 2^16 = 65535 = short(-1).
В мкл поведение соответствует этому правилу.
ЗЫ: Возможно, я там кого-нибудь в заблуждение ввёл, когда написал short(-1), это должно быть справедливо лишь для two's complement систем, поэтому такой подход неверен. Хотя какую-нибудь one's complement никогда не встречал, не знаю где такие водятся.