Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Deklaruje wyliczenie w zakresie przestrzeni nazw, który jest typem zdefiniowanym przez użytkownika składającym się z zestawu nazwanych stałych nazywanych modułami wyliczania.
Wszystkie środowiska wykonawcze
Uwagi
C++/CX i C++/CLI obsługują publiczną klasę wyliczenia i prywatną klasę wyliczenia, która jest podobna do standardowej klasy wyliczenia języka C++, ale z dodatkiem specyfikatora ułatwień dostępu. W obszarze /clr typ klasy wyliczenia C++11 jest dozwolony, ale wygeneruje ostrzeżenie C4472, które ma zapewnić, że naprawdę potrzebujesz typu wyliczenia ISO, a nie typu C++/CX i C++/CLI. Aby uzyskać więcej informacji na temat słowa kluczowego ISO Standard C++ enum , zobacz Wyliczenia.
Środowisko wykonawcze systemu Windows
Składnia
access
enum class
enumeration-identifier
[:underlying-type] { enumerator-list } [var];
accessenum structenumeration-identifier[:underlying-type] { enumerator-list } [var];
Parametry
dostęp
Dostępność wyliczenia, które może być public lub private.
enumeration-identifier
Nazwa wyliczenia.
typ bazowy
(Opcjonalnie) Podstawowy typ wyliczenia.
(Opcjonalnie. tylko środowisko wykonawcze systemu Windows) Podstawowym typem wyliczenia, które może być bool, char, char16, intuint16uint32int16int64lub .uint64
enumerator-list
Rozdzielana przecinkami lista nazw modułów wyliczania.
Wartość każdego modułu wyliczającego jest wyrażeniem stałym, które jest definiowane niejawnie przez kompilator lub jawnie za pomocą notacji, wyrażenia stałe-wyliczenia=. Domyślnie wartość pierwszego modułu wyliczającego wynosi zero, jeśli jest niejawnie zdefiniowana. Wartość każdego kolejnego niejawnie zdefiniowanego modułu wyliczającego jest wartością poprzedniego modułu wyliczającego + 1.
var
(Opcjonalnie) Nazwa zmiennej typu wyliczenia.
Uwagi
Aby uzyskać więcej informacji i przykłady, zobacz wyliczenie.
Należy pamiętać, że kompilator emituje komunikaty o błędach, jeśli wyrażenie stałe definiujące wartość modułu wyliczającego nie może być reprezentowane przez typ źródłowy. Jednak kompilator nie zgłasza błędu dla wartości, która jest nieodpowiednia dla typu bazowego. Na przykład:
Jeśli typ źródłowy jest liczbowy, a moduł wyliczający określa maksymalną wartość tego typu, nie można przedstawić wartości następnej niejawnie zdefiniowanej wyliczenia.
Jeśli typ źródłowy to
bool, a więcej niż dwa moduły wyliczane są niejawnie zdefiniowane, moduły wyliczania po dwóch pierwszych nie mogą być reprezentowane.Jeśli typ źródłowy to
char16, a wartość wyliczenia waha się od 0xD800 przez 0xDFFF, wartość może być reprezentowana. Jednak wartość logicznie niepoprawna, ponieważ reprezentuje pół pary zastępczej Unicode i nie powinna być widoczna w izolacji.
Wymagania
Opcja kompilatora: /ZW
środowiska uruchomieniowe w trakcie wykonania
Składnia
access
enum class
name [:type] { enumerator-list } var;
accessenum structname [:type] { enumerator-list } var;
Parametry
dostęp
Dostępność wyliczenia. Może to być wartość public lub private.
enumerator-list
Rozdzielana przecinkami lista identyfikatorów (wyliczeń) w wyliczeniem.
name
Nazwa wyliczenia. Anonimowe zarządzane wyliczenia są niedozwolone.
type
(Opcjonalnie) Podstawowy typ identyfikatorów. Może to być dowolny typ skalarny, taki jak podpisane lub niepodpisane wersje int, shortlub long. bool lub char jest również dozwolony.
var
(Opcjonalnie) Nazwa zmiennej typu wyliczenia.
Uwagi
Klasy wyliczenia i struktura wyliczenia są równoważnymi deklaracjami.
Istnieją dwa typy wyliczenia: zarządzane lub C++/CX i standardowe.
Wyliczenie zarządzane lub C++/CX może być zdefiniowane w następujący sposób:
public 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;
};
Wyliczenie standardowe może być zdefiniowane w 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 modułów wyliczania (identyfikatory) nie są wstrzykiwane do zakresu, w którym zdefiniowano wyliczenie; wszystkie odwołania do modułów wyliczania muszą być w pełni kwalifikowane (identyfikator nazwy::). Z tego powodu nie można zdefiniować anonimowego wyliczenia zarządzanego.
Moduły wyliczające standardowego wyliczenia są silnie wstrzykiwane do otaczającego zakresu. Oznacza to, że jeśli istnieje inny symbol o takiej samej nazwie jak moduł wyliczający w otaczającym zakresie, kompilator wygeneruje błąd.
W programach Visual Studio 2002 i Visual Studio 2003 moduły wyliczające zostały słabo wprowadzone (widoczne w zakresie otaczającym, chyba że istnieje inny identyfikator o tej samej nazwie).
Jeśli standardowe wyliczenie języka C++ jest zdefiniowane (bez class lub struct), kompilowanie z elementem /clr spowoduje skompilowanie wyliczenia jako zarządzane wyliczenie. Wyliczenie nadal ma semantykę niezarządzanego wyliczenia. Należy pamiętać, że kompilator wprowadza atrybut, Microsoft::VisualC::NativeEnumAttribute aby zidentyfikować intencję programisty, aby wyliczenie było wyliczeniem natywnym. Inne kompilatory będą po prostu widzieć wyliczenie standardowe jako zarządzane wyliczenie.
Nazwane, standardowe wyliczenie skompilowane /clr za pomocą będzie widoczne w zestawie jako zarządzane wyliczenie i może być używane przez dowolny inny zarządzany kompilator. Nienazwany wyliczenie standardowe nie będzie jednak publicznie widoczne z zestawu.
W programach Visual Studio 2002 i Visual Studio 2003 standardowy wyliczenie używane jako typ w parametrze 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);
}
program emituje następujące elementy w MSIL dla podpisu funkcji:
void f(int32);
Jednak w bieżących wersjach kompilatora standardowe wyliczenie jest emitowane jako wyliczenie zarządzane z atrybutem [NativeEnumAttribute] i następujące elementy w języku MSIL dla podpisu funkcji:
void f(E)
Aby uzyskać więcej informacji na temat wyliczenia natywnych, zobacz Deklaracje wyliczenia języka C++.
Aby uzyskać więcej informacji na temat wyliczenia CLR, zobacz:
Wymagania
Opcja kompilatora: /clr
Przykłady
// 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);
}
no automatic conversion to int: b
convert to int: 1
1
1
Zobacz też
Rozszerzenia składników dla platformy .NET i platformy uniwersalnej systemu Windows