Udostępnij za pośrednictwem


enum class (C++ Component Extensions)

Deklaruje wyliczenie, który jest zdefiniowanym przez użytkownika typem składającym się z szeregu nazwanych stałych zwanych wyliczeniami.

Wszystkie czasy wykonania

Uwagi

C++/CX i C++/CLI wspiera public enum class i private enum class które są podobne do standardowych wyliczeń klasy C++, ale z dodanym specyfikatorem ułatwień dostępu.Aby uzyskać więcej informacji o starszych standardowych słowach kluczowych w języku C++ enum, zobacz Deklaracje wyliczania C++.

Środowisko wykonawcze systemu Windows

Składnia

access enum class enumeration-identifier [:underlying-type] { enumerator-list } [var];
access enum struct enumeration-identifier [:underlying-type] { enumerator-list } [var];

Parametry

  • dostęp
    Dostępność enumeracji, która może być public lub private.

  • identyfikator wyliczenia
    Nazwa wyliczenia.

  • Typ podstawowy
    (Opcjonalnie) Leżący u podstaw typ enumeracji.

    (Opcjonalnie.tylko Środowisko wykonawcze systemu Windows) podlegający typ enumeracji, którym może być bool, char, char16, int16, uint16, int, uint32, int64 lub uint64.

  • Moduł wyliczający listy
    Rozdzielana przecinkami lista nazw moduł wyliczający.

    Wartość każdego enumeratora jest wyrażeniem stałym albo zdefiniowanym niejawnie przez kompilator, albo jawnie przez zapis enumerator=wyrażenie stałe.Domyślnie wartość pierwszego modułu wyliczającego wynosi zero, jeśli nie jest pośrednio zdefiniowana.Wartością każdego kolejnego modułu wyliczającego zdefiniowanego niejawnie jest wartość poprzedniego modułu wyliczającego + 1.

  • var
    (Opcjonalnie) Nazwa zmiennej typu enumeracji.

Uwagi

Aby uzyskać dodatkowe informacje i przykłady, zobacz Wyliczenia.

Należy zauważyć, że kompilator generuje komunikaty o błędach, jeśli wyrażenie stałe, które definiuje wartość modułu wyliczającego, nie da się reprezentować przez typ bazowy.Jednak kompilator nie zgłasza błędu dotyczącego wartości, która jest nieodpowiednia dla podstawowego typu.Na przykład:

  • Jeśli podstawowy typ jest liczbą i moduł wyliczający określa maksymalną wartość dla tego typu, nie można przedstawić wartości następnego wyliczenia zdefiniowanego niewyraźnie.

  • Jeśli podstawowe typy jest bool, i więcej niż dwa moduły wyliczające są wyraźnie zdefiniowane, moduły wyliczające po dwóch pierwszych nie może być przedstawione.

  • Jeśli podstawowy typ jest char16, a wartość wyliczenia znajduje się w zakresie od 0xD800 do 0xDFFF, wartość może być reprezentowana.Jednakże wartość jest logicznie niepoprawna, ponieważ reprezentuje ona pół zastępcze pary Unicode i nie powinna być wyświetlana sama.

a6cskb49.collapse_all(pl-pl,VS.110).gifWymagania

Opcja kompilatora: /ZW

Środowisko uruchomieniowe języka wspólnego

Składnia

access enum class name [:type] { enumerator-list } var;
access enum struct name [:type] { enumerator-list } var;

Parametry

  • access
    Dostępność typu enum.Mogą być albo publiczny albo private.

  • enumerator-list
    Rozdzielana przecinkami lista identyfikatorów (moduły wyliczające) w wyliczeniu.

  • name
    Nazwa wyliczenia.Anonimowe wyliczenia zarządzane nie są dozwolone.

  • type (opcjonalnie)
    Podlegający typ identyfikatorów.Może to być każdy typ skalarny, taki jak wersje int, short lub long ze znakiem lub bez.bool lub char jest również dozwolone.

  • var (opcjonalnie)
    Nazwa zmiennej typu enumeracji.

Uwagi

Wylicz klasy i wylicz struktury to równoważne deklaracje.

Istnieją dwa typy enum: zarządzany i standardowy.

Zarządzany element wyliczenia można zdefiniować następujący sposób:

enum class day {sun, mon };

i jest semantycznie równoważne:

ref class day {
public:
   static const int sun = 0;
   static const int mon = 1;
};

Standardowe wyliczenie można zdefiniować następujący sposób:

enum day2 {sun, mon, };

i jest semantycznie równoważne:

static const int sun = 0;
static const int mon = 1;

Zarządzane nazwy wyliczenia (identyfikatorów) nie są dodawane do zakresu, w którym zdefiniowano wyliczenie; wszystkie odniesienia do modułów wyliczających muszą być w pełni kwalifikowane (Nazwa::identyfikatora).Z tego powodu nie można zdefiniować anonimowego zarządzanego wyliczenia.

Moduły wyliczające standardowego typu enum są zdecydowanie włączane w zawierający je zakres.To znaczy, że jeśli istnieje inny symbol z taką samą nazwą, jak moduł wyliczający w danym kontekście, wówczas kompilator wygeneruje błąd.

W Visual C++ 2002 i Visual C++ 2003 moduły wyliczające były słabo wprowadzone (widoczne w zawartym zasięgu, chyba że wystąpił inny identyfikator o tej samej nazwie).

Jeśli zdefiniowano standardowe wyliczenie C++ (bez klasy lub struct), kompilowania z/CLR spowoduje, że wyliczenie zostanie zestawione jako wyliczenie zarządzane.Enumeracja nadal ma semantykę enumeracji niezarządzanej.Należy zauważyć, że kompilator wstawia atrybut Microsoft::VisualC::NativeEnumAttribute, rozpoznawany przez kompilator Visual C++ w celu oznaczenia intencji programisty, by enum stanowił natywny enum.Inne kompilatory po prostu zobaczą standardowy enum jako zarządzany enum.

Nazwane, standardowe wyliczenie skompilowane z/CLR będą widoczne w zestawie jako zarządzane wyliczenia i mogą być używane przez każdy inny zarządzany kompilator.Jednak nienazwane wyliczenia standardowe nie będą widoczne publicznie z zestawu.

W Visual C++ 2002 i Visual C++ 2003, standardowe wyliczenie używane jako typ parametru funkcji:

// mcppv2_enum.cpp
// compile with: /clr
enum E { a, b };
void f(E) {System::Console::WriteLine("hi");}

int main() {
   E myi = b;
   f(myi);
}

będzie wysyłać w MSIL następujące wyniki dla podpisu funkcji:

void f(int32);

Jednak w obecnej wersji kompilatora, standardowe wyliczenie jest emitowane jako wyliczenie zarządzane za pomocą [Macierzysty atrybut wyliczenia] i następujące w MSIL dla podpisu funkcji:

void f(E)

Aby uzyskać więcej informacji na temat wyliczeń macierzystych, zobacz Deklaracje wyliczeń C++.

W środowisku projektowym, można uzyskać Pomoc F1 dla tych słów kluczowych, wyróżniając słowo kluczowe, (enum class, na przykład) i naciskając klawisz F1.

Aby uzyskać więcej informacji na temat wyliczania CLR, zobacz:

a6cskb49.collapse_all(pl-pl,VS.110).gifWymagania

Opcja kompilatora: /clr

a6cskb49.collapse_all(pl-pl,VS.110).gifPrzykłady

Przykład

malejąco

// mcppv2_enum_2.cpp
// compile with: /clr
// managed enum
public enum class m { a, b };

// standard enum
public enum n { c, d };

// unnamed, standard enum
public enum { e, f } o;

int main() {
   // consume managed enum
   m mym = m::b;
   System::Console::WriteLine("no automatic conversion to int: {0}", mym);
   System::Console::WriteLine("convert to int: {0}", (int)mym);

   // consume standard enum
   n myn = d;
   System::Console::WriteLine(myn);

   // consume standard, unnamed enum
   o = f;
   System::Console::WriteLine(o);
}Optionally, copy this sequence of tags for each example you want, then populate the text nodes. That is, after section+title("Examples")+content, insert: para+embeddedLabel ("Example")+para(sample description); code(sample); para+embeddedLabel("Output"); computerOutput(sample output, including 'br' tag instead of newlines)

Dane wyjściowe

  
  
  
  

Zobacz też

Koncepcje

Składnik rozszerzeń dla platform Runtime