Предупреждение C26451
Арифметический переполнение: использование оператора "operator" в значении размера байта, а затем приведение результата к значению байта size-b. Приведение значения к более широкому типу перед вызовом оператора "оператор" для предотвращения переполнения (io.2)
Это предупреждение указывает на неправильное поведение, которое приводит к целочисленным правилам и типам, превышающим арифметические действия, которые обычно выполняются.
Замечания
Анализ кода определяет, когда целочисленное значение перемещается влево, умножается, добавляется или вычитается, а результат получает приведение к более широкому целочисленного типа. Если операция переполняет более узкий целочисленный тип, данные теряются. Эту потерю можно предотвратить, приведения значения к более широкому типу перед арифметической операцией.
Имя анализа кода: RESULT_OF_ARITHMETIC_OPERATION_CAST_TO_LARGER_SIZE
Примеры
Следующий код создает это предупреждение:
void leftshift(int i) noexcept
{
unsigned long long x;
x = i << 31; // C26451 reported here
// code
}
Чтобы исправить это предупреждение, используйте следующий код:
void leftshift(int i) noexcept
{
unsigned long long x;
x = static_cast<unsigned long long>(i) << 31; // OK
// code
}
См. также
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по