C++ enum class | Scoped Enumerations Explained
이 글의 핵심
Why `enum class` replaces many plain enums: safety, scope, and explicit conversions.
What is enum class?
Scoped enumeration (enum class) is a strongly typed enum: enumerators live under the enum’s scope and do not implicitly convert to integers.
enum class Status { OK, Error, Pending };
Status s = Status::OK;
// int x = s; // error
int x = static_cast<int>(s);
Compared to plain enum
| Feature | enum | enum class |
|---|---|---|
| Implicit int conversion | Yes | No |
| Scoped enumerators | No | Yes |
| Name clashes | Common | Rare |
Basic usage
enum class Color { Red, Green, Blue };
Color c = Color::Red;
if (c == Color::Red) { /* ... */ }
switch (c) {
case Color::Red: break;
case Color::Green: break;
case Color::Blue: break;
}
Underlying type
enum class Small : std::uint8_t { A, B, C };
enum class Flags : std::uint32_t { Read = 1 << 0, Write = 1 << 1 };
Bit flags
enum class does not enable | by default; overload operators or use std::to_underlying (C++23) / static_cast for masks—see the full Korean article for operator examples.
Related posts
- Bit manipulation
- explicit keyword
Keywords
C++, enum class, scoped enum, strong typing, C++11