Upozornění C26451
Aritmetické přetečení: Použití operátoru "operator" u hodnoty velikosti bajtu a následné přetypování výsledku na hodnotu velikosti b bajtu. Před voláním operátoru "operator" přetypujte hodnotu na širší typ, aby se zabránilo přetečení (io.2).
Toto upozornění označuje nesprávné chování, které má za následek celočíselné pravidla povýšení a typy větší než ty, ve kterých se obvykle provádí aritmetika.
Poznámky
Analýza kódu zjistí, kdy se integrální hodnota posune doleva, vynásobí, přičte nebo odečte a výsledek se přetypuje na širší integrální typ. Pokud operace přeteče užší celočíselný typ, dojde ke ztrátě dat. Tuto ztrátu můžete zabránit přetypováním hodnoty na širší typ před aritmetickou operací.
Název analýzy kódu: RESULT_OF_ARITHMETIC_OPERATION_CAST_TO_LARGER_SIZE
Příklady
Následující kód vygeneruje toto upozornění:
void leftshift(int i) noexcept
{
unsigned long long x;
x = i << 31; // C26451 reported here
// code
}
Pokud chcete toto upozornění opravit, použijte následující kód:
void leftshift(int i) noexcept
{
unsigned long long x;
x = static_cast<unsigned long long>(i) << 31; // OK
// code
}