V6117. Possible overflow. The expression will be evaluated before casting. Consider casting one of the operands instead.
Анализатор обнаружил подозрительное приведение типов. Результат бинарной операции приводится к типу с большим диапазоном.
Рассмотрим пример:
long multiply(int a, int b) {
return (long)(a * b);
}
Такое преобразование избыточно. Тип 'int' и так бы автоматически расширился до типа 'long'.
Скорее всего, подобный паттерн приведения используется для защиты от переполнения, но он неправильный. При перемножении переменных типа 'int' всё равно произойдёт переполнение, и только уже бессмысленный результат умножения будет явно расширен до типа 'long'.
Для корректной защиты от переполнения можно привести один из аргументов к типу 'long'. Исправленный код:
long multiply(int a, int b) {
return (long)a * b;
}
Выявляемые диагностикой ошибки классифицируются согласно ГОСТ Р 71207–2024 как критические и относятся к типу: Ошибки целочисленного переполнения и некорректного совместного использования знаковых и беззнаковых чисел. |
Данная диагностика классифицируется как: