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
}
Viz také
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro