>
>
>
V3200. Possible overflow. The expressio…


V3200. 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;
}

Данная диагностика классифицируется как: