Partager via


Avertissement C26451

Dépassement arithmétique : utilisation de l’opérateur 'operator' sur une valeur d’octet de taille-a , puis conversion du résultat en valeur d’octet size-b . Caster la valeur en type plus large avant d’appeler l’opérateur 'operator' pour éviter le dépassement de capacité (io.2)

Cet avertissement indique un comportement incorrect qui résulte de règles de promotion intégrales et de types supérieurs à ceux dans lesquels l’arithmétique est généralement effectuée.

Notes

L’analyse du code détecte lorsqu’une valeur intégrale est décalée vers la gauche, multipliée, ajoutée ou soustraite, et que le résultat est converti en type intégral plus large. Si l’opération dépasse le type intégral plus étroit, les données sont perdues. Vous pouvez empêcher cette perte en cas de conversion de la valeur en un type plus large avant l’opération arithmétique.

Nom de l’analyse du code : RESULT_OF_ARITHMETIC_OPERATION_CAST_TO_LARGER_SIZE

Exemples

Le code suivant génère cet avertissement :

void leftshift(int i) noexcept
{
  unsigned long long x;
  x = i << 31;  // C26451 reported here

  // code
}

Pour corriger cet avertissement, utilisez le code suivant :

void leftshift(int i) noexcept
{
  unsigned long long x;
  x = static_cast<unsigned long long>(i) << 31; // OK

  // code
}

Voir aussi

C26450
C26452
C26453
C26454
ES.103 : Ne pas dépasser