Приведение типов
Приведение типов и типизация операций в LC
Язык LC использует строгую систему приведения типов, ориентированную на безопасность и предсказуемость поведения кода при работе с переменными. В LC разрешено приводить только примитивные типы (например, byte, int, bool). Приведение между структурами, массивами, указателями и т.п. не поддерживается.
Явное приведение типов
Приведение типов по синтаксису похоже на C/C++:
Автоматическое приведение типов
Автоматическое приведение типов в LC почти отсутствует. Это сделано намеренно — чтобы уменьшить количество трудноуловимых ошибок, связанных с неявным преобразованием типов и потерей данных. Автоматическое приведение допускается только в двух случаях:
Пример: присвоение литералов (констант)
Если литерал может быть безопасно приведён к целевому типу без потери знака или переполнения — присваивание разрешается. Иначе — ошибка компиляции.Пример: передача литералов в функции
Типизация арифметических и побитовых операций
LC не использует неявное приведение типов в выражениях. Операции работают только между значениями одного и того же типа.
✅ Допустимые примеры:
❌ Недопустимые примеры:
int a;
byte b;
byte c;
a = b + c; // Ошибка: результат byte + byte имеет тип byte, а не int
a = (int)b + (int)c; // OK: явное приведение
Результат операции имеет тот же тип, что и её операнды. Это значит, что:
byte+byte→byteint*int→int- и т. д.
В отличие от C, в LC нет автоматического расширения внутри выражений.
Побитовые сдвиги: особые правила
Операции побитового сдвига (<<, >>) — единственное исключение из правила совпадения типов:
value— любого целочисленного типаshift— обязательно типаbyte- результат имеет тот же тип, что и
value