Ce face std::to_underlying
Valorile unui enum class nu se transformă singure în numere. Până acum scriai static_cast<int>(e), cu riscul de a alege alt tip decât cel real al enumerării.
std::to_underlying(e) returnează valoarea exact în tipul de bază al enumerării (int implicit, sau cel scris după :, de exemplu std::uint8_t).
Parametri
| Parametru | Descriere |
|---|---|
e |
Valoarea de enumerare. |
Ce returnează
Valoarea numerică, de tipul std::underlying_type_t<Enum>.
Exemple
Exemplul 1: Coduri de stare
#include <print>
#include <utility>
enum class Stare { Nou = 1, Platit = 2, Livrat = 5 };
int main() {
Stare s = Stare::Livrat;
std::println("cod stare: {}", std::to_underlying(s));
std::println("plătit + 1 = {}", std::to_underlying(Stare::Platit) + 1);
}
Rezultat
cod stare: 5
plătit + 1 = 3
Greșeli frecvente
- Încerci
std::println("{}", Stare::Livrat)direct. Enumerările nu au format implicit; transformă întâi valoarea custd::to_underlying.
Comenzi înrudite
enum: Definește un tip cu o listă fixă de valori cu nume, de exemplu zilele săptămânii sau stările unei comenzi.static_cast, dynamic_cast, const_cast, reinterpret_cast: Cele patru conversii explicite: static_cast (obișnuite), dynamic_cast (clase), const_cast (const) și reinterpret_cast (biți).