Dela via


Varning C26812

Uppräkningstypen 'type-name' är oöverlagd. Föredra "enum class" framför "enum" (Enum.3)

Anmärkningar

Föredra enum class framför enum för att förhindra föroreningar i det globala namnområdet.

Kodanalysnamn: PreferScopedEnum

Exempel

Följande exempel är från C++ Core Guidelines:

void Print_color(int color);

enum Web_color { red = 0xFF0000, green = 0x00FF00, blue = 0x0000FF };
enum Product_info { Red = 0, Purple = 1, Blue = 2 };

Web_color webby = Web_color::blue;

// Clearly at least one of these calls is buggy.
Print_color(webby);               // C26812
Print_color(Product_info::Blue);  // C26812

Dessa varningar korrigeras genom att deklarera en enum som enum class:

void Print_color(int color);

enum class Web_color { red = 0xFF0000, green = 0x00FF00, blue = 0x0000FF };
enum class Product_info { Red = 0, Purple = 1, Blue = 2 };

Web_color webby = Web_color::blue;
Print_color(webby);  // Error: cannot convert Web_color to int.
Print_color(Product_info::Red);  // Error: cannot convert Product_info to int.

Se även

Enum.3 Föredra enum class framför enum