Partager via


Avertissement C26828

Différents types d’énumération ont des valeurs qui se chevauchent. Voulez-vous utiliser une autre constante d’énumération ici ?

Notes

La plupart du temps, un type d’énumération unique décrit tous les indicateurs de bits que vous pouvez utiliser pour une option. Si vous utilisez deux types d’énumération différents qui se chevauchent dans la même expression au niveau du bit, les chances sont bonnes que ces types d’énumération n’ont pas été conçus ensemble.

Nom de l’analyse du code : MIXING_OVERLAPPING_ENUMS

Exemple

L’exemple de code suivant provoque l’avertissement C26828 :

enum BitWiseA
{
    A = 1,
    B = 2,
    C = 4
};

enum class BitWiseB
{
    AA = 1,
    BB = 2,
    CC = 4,
    All = 7
};

int overlappingBitwiseEnums(BitWiseA a) 
{
    return (int)a|(int)BitWiseB::AA; // Warning C26828: Different enum types have overlapping values. Did you want to use another enum constant here?
}

Pour corriger l’avertissement, assurez-vous que les types d’énumération conçus pour être utilisés ensemble n’ont pas de valeurs qui se chevauchent. Vous pouvez également vérifier que toutes les options associées se trouvent dans un seul type d’énumération.

enum BitWiseA
{
    A = 1,
    B = 2,
    C = 4
};

int overlappingBitwiseEnums(BitWiseA a) 
{
    return (int)a|(int)BitWiseA::A; // No warning.
}

Voir aussi

C26813
C26827