Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
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
}