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
}

Siehe auch

26450
26452
26453
26454
ES.103: Nicht überlaufen