Bagikan melalui


Peringatan C26828

Jenis enum yang berbeda memiliki nilai yang tumpang tindih. Apakah Anda ingin menggunakan enum konstanta lain di sini?

Keterangan

Sebagian besar waktu, jenis enumerasi tunggal menjelaskan semua bendera bit yang dapat Anda gunakan untuk opsi. Jika Anda menggunakan dua jenis enumerasi berbeda yang memiliki nilai tumpang tindih dalam ekspresi bitwise yang sama, kemungkinan besar jenis enumerasi tersebut tidak dirancang untuk digunakan bersama-sama.

Nama analisis kode: MIXING_OVERLAPPING_ENUMS

Contoh

Contoh kode berikut menyebabkan peringatan 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?
}

Untuk memperbaiki peringatan, pastikan jenis enumerasi yang dirancang untuk digunakan bersama-sama tidak memiliki nilai yang tumpang tindih. Atau, pastikan semua opsi terkait berada dalam satu jenis enumerasi.

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

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

Baca juga

C26813
C26827