std::to_underlying în C++

Transformă o valoare de enumerare (inclusiv enum class) în numărul întreg din spatele ei.

Sintaxă
#include <utility>
template<class Enum>
constexpr std::underlying_type_t<Enum> to_underlying(Enum e) noexcept;

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 cu std::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).