Implizite Konvertierung von stark typisierten Aufzählungen in Int
In C sind stark typisierte Aufzählungen eine relativ neue Funktion, die im Vergleich zu herkömmlichen Aufzählungen mehr Sicherheit bietet Aufzählungen. Ein Unterschied zwischen diesen Typen besteht darin, dass stark typisierte Aufzählungen nicht implizit in Ganzzahlen konvertiert werden können. Dieses Verhalten ist beabsichtigt, um unbeabsichtigte Konvertierungen zu verhindern.
In bestimmten Szenarien müssen Sie jedoch möglicherweise einen stark typisierten Enum-Wert in eine Ganzzahl konvertieren. In diesen Fällen können Sie den Operator static_cast verwenden. Sie müssen jedoch den zugrunde liegenden Ganzzahltyp in der Umwandlung explizit angeben.
<code class="cpp">enum class b { B1, B2 }; int foo(int input) { return input; } int main(void) { int value = static_cast<int>(b::B2); // Explicit cast required std::cout << foo(value) << std::endl; }
Wenn Sie den zugrunde liegenden Typ nicht explizit angeben möchten, können Sie eine Vorlagenfunktion wie diese verwenden:
<code class="cpp">template <typename E> constexpr typename std::underlying_type<E>::type to_underlying(E e) noexcept { return static_cast<typename std::underlying_type<E>::type>(e); } int main(void) { std::cout << foo(to_underlying(b::B2)) << std::endl; // No explicit cast needed }</code>
Durch die Verwendung dieser Vorlagenfunktion müssen Sie nicht jedes Mal den zugrunde liegenden Typ angeben, wenn Sie einen stark typisierten Enum-Wert in eine Ganzzahl konvertieren müssen. Es bietet eine prägnantere und wiederverwendbarere Lösung.
Das obige ist der detaillierte Inhalt vonWie konvertiere ich stark typisierte Enums in Ganzzahlen in C?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!