Warnung C26451
Arithmetischer Überlauf: Verwenden des Operators "operator" für einen Bytewert der Größe und anschließendes Umwandeln des Ergebnisses in einen Bytewert von "size-b ". Wandeln Sie den Wert in den breiteren Typ um, bevor der Operator "operator" aufgerufen wird, um einen Überlauf zu vermeiden (io.2)
Diese Warnung weist auf ein falsches Verhalten hin, das aus integralen Heraufsteigerregeln und Typen resultiert, die größer sind als die, in denen Arithmetik normalerweise ausgeführt wird.
Hinweise
Die Codeanalyse erkennt, wann ein integraler Wert nach links verschoben, multipliziert, hinzugefügt oder subtrahiert wird und das Ergebnis in einen breiteren Integraltyp umgewandelt wird. Wenn der Vorgang den schmaleren integralen Typ überläuft, gehen die Daten verloren. Sie können diesen Verlust verhindern, indem Sie den Wert vor dem arithmetischen Vorgang in einen breiteren Typ umwandeln.
Codeanalysename: RESULT_OF_ARITHMETIC_OPERATION_CAST_TO_LARGER_SIZE
Beispiele
Der folgende Code generiert diese Warnung:
void leftshift(int i) noexcept
{
unsigned long long x;
x = i << 31; // C26451 reported here
// code
}
So korrigieren Sie die Warnung unter Verwendung des folgenden Codes
void leftshift(int i) noexcept
{
unsigned long long x;
x = static_cast<unsigned long long>(i) << 31; // OK
// code
}