Powiel możliwe:
Generic way to cast int to enum in C++Jak rzucić int do wyliczenia w C++?
Jak mogę rzucać int do wyliczenia w C++?
Na przykład:
enum Test
{
A, B
};
int a = 1;
Jak przekonwertować a
do rodzaju testu :: A?
Powiel możliwe:
Generic way to cast int to enum in C++Jak rzucić int do wyliczenia w C++?
Jak mogę rzucać int do wyliczenia w C++?
Na przykład:
enum Test
{
A, B
};
int a = 1;
Jak przekonwertować a
do rodzaju testu :: A?
Test e = static_cast<Test>(1);
MSDN: Nie przeprowadza się sprawdzania typu run-time, aby zapewnić bezpieczeństwo konwersji (http://msdn.microsoft.com/en-us/library/c36yw7x9(v=vs.80).aspx). –
MSDN: Operator static_cast może jawnie przekonwertować wartość całkowitą na typ wyliczeniowy. Jeśli wartość typu całkowego nie mieści się w zakresie wartości wyliczeniowych, wynikowa wartość wyliczenia jest niezdefiniowana. –
@KirillKobelev, jeśli wartość całki może być reprezentowana przez podstawowy typ wyliczenia, a wynikowe wyliczenie musi mieć tę wartość. W przeciwnym razie wytworzona wartość wyliczeniowa będzie dowolną wartością wynikającą z zamiany wyrażenia na bazowy typ enum. Jeśli VC++ robi coś innego, to myślę, że jest niezgodny. – bames53
Kod
enum Test
{
A, B
}
int a = 1;
Rozwiązanie
Test castEnum = (Test)a;
Dobrze jest użyć najbardziej restrykcyjnej obsady i unikać rzutów w stylu C, aby dać kompilatorowi największą szansę na wykrycie błędów."static_cast" będzie tu lepszym rzutem. –
@Mike Seymour, problem polega na tym, że odlewanie statyczne nie ma w tym przypadku żadnej różnicy od C-cast. Jak i jaki błąd może wykryć? –
@KirillKobelev: Problem polega na tym, że rzut w stylu C nie jest wyraźny. Może być równy 'static_cast', ale równie dobrze może być' const_cast' lub nawet gorzej, 'reinterpret_cast' lub nawet ich kombinacją. Nawet jeśli wiesz teraz, co to może się pogorszyć, przypuśćmy, że zmienisz 'a' na inny typ w późniejszym czasie, to równie dobrze może być typem zmian rzucania bez otrzymania nawet ostrzeżenia, nie chcesz tego. – KillianDS
podoba mi się fakt, że ma to negatywny wynik, oznaczonej jako powielone ale jest najlepsze wyniki podczas wyszukiwania Google dla "C++ int to enum" – Rickard
[link] (http://www.enel.ucalgary.ca/People/Norman/enel315_winter1997/enum_types/) Notatka że nie ma znaczenia, czy int pasuje do jednej ze stałych typu wyliczeniowego; Konwersja typu jest zawsze nielegalna. – Iwaz
Jeśli to dup, dlaczego odpowiedzi są tak różne? – nobar