enum class (C++/CLI ve C++/CX)
Numaralandırma adı verilen adlandırılmış sabit kümesinden oluşan kullanıcı tanımlı bir tür olan ad alanı kapsamında bir numaralandırma bildirir.
Tüm Çalışma Zamanları
Açıklamalar
C++/CX ve C++/CLI, standart C++ sabit listesi sınıfına benzer ancak erişilebilirlik tanımlayıcısının eklenmesiyle genel sabit listesi sınıfını ve özel sabit listesi sınıfını destekler. /clr altında C++11 sabit listesi sınıf türüne izin verilir, ancak C++/CX ve C++/CLI türünü değil, ISO sabit listesi türünü gerçekten istediğinizden emin olmak için C4472 uyarısını oluşturur. ISO Standard C++ enum
anahtar sözcüğü hakkında daha fazla bilgi için bkz . Numaralandırmalar.
Windows Çalışma Zamanı
Sözdizimi
access
enum class
enumeration-identifier
[:underlying-type] { enumerator-list } [var];
accessenum structenumeration-identifier[:underlying-type] { enumerator-list } [var];
Parametreler
erişim
veya private
olabilecek public
numaralandırmanın erişilebilirliği.
sabit listesi tanımlayıcısı
Numaralandırmanın adı.
temel alınan tür
(İsteğe bağlı) Numaralandırmanın temel alınan türü.
(İsteğe bağlı. Yalnızca Windows Çalışma Zamanı) Numaralandırmanın , , , , char16
, int16
, uint16
, int
uint32
, int64
, veya uint64
olabilecek char
bool
temel türü.
enumerator-list
Numaralandırıcı adlarının virgülle ayrılmış listesi.
Her numaralandırıcının değeri, derleyici tarafından örtük olarak veya açıkça numaralandırma =
sabit-ifadesi tarafından tanımlanan bir sabit ifadedir. Varsayılan olarak, örtük olarak tanımlanmışsa ilk numaralandırıcının değeri sıfırdır. Sonraki örtük olarak tanımlanan her numaralandırıcının değeri, önceki numaralandırıcı + 1 değeridir.
var
(İsteğe bağlı) Numaralandırma türündeki bir değişkenin adı.
Açıklamalar
Daha fazla bilgi ve örnek için bkz . Sabit listeleri.
Bir numaralandırıcının değerini tanımlayan sabit ifade temel alınan tür tarafından temsil edilemiyorsa, derleyicinin hata iletileri yaydığını unutmayın. Ancak, derleyici temel alınan tür için uygun olmayan bir değer için hata bildirmez. Örneğin:
Temel alınan tür sayısalsa ve numaralandırıcı bu tür için en yüksek değeri belirtiyorsa, örtük olarak tanımlanan bir sonraki numaralandırmanın değeri temsil edilemez.
Temel alınan tür ise
bool
ve ikiden fazla numaralandırıcı örtük olarak tanımlanmışsa, ilk ikisinden sonraki numaralandırıcılar temsil edilemez.Temel alınan tür ise
char16
ve numaralandırma değeri 0xD800 ile 0xDFFF arasında değişiyorsa, değer temsil edilebilir. Ancak, değeri mantıksal olarak yanlış çünkü yarı Unicode vekil çiftini temsil eder ve yalıtımda görünmemelidir.
Gereksinimler
Derleyici seçeneği: /ZW
Ortak Dil Çalışma Zamanı
Sözdizimi
access
enum class
name [:type] { enumerator-list } var;
accessenum structname [:type] { enumerator-list } var;
Parametreler
erişim
Numaralandırmanın erişilebilirliği. veya private
olabilirpublic
.
enumerator-list
Numaralandırmadaki tanımlayıcıların (numaralandırıcılar) virgülle ayrılmış listesi.
ad
Numaralandırmanın adı. Anonim yönetilen numaralandırmalara izin verilmez.
type
(İsteğe bağlı) Tanımlayıcıların temel türü. Bu, , veya long
'nin imzalı veya imzasız sürümleri int
short
gibi herhangi bir skaler tür olabilir. bool
veya char
ayrıca izin verilir.
var
(İsteğe bağlı) Numaralandırma türündeki bir değişkenin adı.
Açıklamalar
enum sınıfı ve enum yapısı eşdeğer bildirimlerdir.
İki tür sabit listesi vardır: yönetilen veya C++/CX ve standart.
Yönetilen veya C++/CX sabit listesi aşağıdaki gibi tanımlanabilir,
public enum class day {sun, mon };
ve, sembolik olarak şu değere eşdeğerdir:
ref class day {
public:
static const int sun = 0;
static const int mon = 1;
};
Standart bir sabit listesi aşağıdaki gibi tanımlanabilir:
enum day2 { sun, mon };
ve, sembolik olarak şu değere eşdeğerdir:
static const int sun = 0;
static const int mon = 1;
Yönetilen numaralandırıcı adları (tanımlayıcılar), numaralandırmanın tanımlandığı kapsama eklenmez; numaralandırıcılara yapılan tüm başvurular tam (ad::
tanımlayıcısı) olmalıdır. Bu nedenle, anonim yönetilen bir sabit listesi tanımlayamazsınız.
Standart bir numaralandırmanın numaralandırıcıları, kapsayan kapsama güçlü bir şekilde eklenir. Diğer bir ifadeyle, kapsayan kapsamda bir numaralandırıcı ile aynı ada sahip başka bir simge varsa, derleyici bir hata oluşturur.
Visual Studio 2002 ve Visual Studio 2003'te numaralandırıcılar zayıf bir şekilde eklendi (aynı ada sahip başka bir tanımlayıcı olmadığı sürece kapsayan kapsamda görünür).
Standart bir C++ sabit listesi tanımlanmışsa (veya struct
olmadanclass
) derleme/clr
, numaralandırmanın yönetilen sabit listesi olarak derlenmesine neden olur. Sabit listesi hala yönetilmeyen bir numaralandırmanın semantiğine sahiptir. Derleyicinin, Microsoft::VisualC::NativeEnumAttribute
bir programcının sabit listesi için yerel bir sabit listesi olma amacını tanımlamak için bir öznitelik eklemektedir. Diğer derleyiciler, standart sabit kümesini yönetilen sabit listesi olarak görür.
ile /clr
derlenen adlandırılmış, standart bir sabit listesi, derlemede yönetilen bir sabit listesi olarak görünür ve diğer yönetilen derleyiciler tarafından kullanılabilir. Ancak, adlandırılmamış bir standart sabit listesi derlemeden genel olarak görünmez.
Visual Studio 2002 ve Visual Studio 2003'te, bir işlev parametresinde tür olarak kullanılan standart bir sabit listesi:
// mcppv2_enum.cpp
// compile with: /clr
enum E { a, b };
void f(E) {System::Console::WriteLine("hi");}
int main() {
E myi = b;
f(myi);
}
, işlev imzası için MSIL'de aşağıdakileri yayar:
void f(int32);
Ancak, derleyicinin geçerli sürümlerinde standart sabit listesi [NativeEnumAttribute] ile yönetilen bir sabit listesi olarak ve işlev imzası için MSIL'de aşağıdakiler gösterilir:
void f(E)
Yerel sabit listeleri hakkında daha fazla bilgi için bkz . C++ Numaralandırma Bildirimleri.
CLR sabit listeleri hakkında daha fazla bilgi için bkz:
Gereksinimler
Derleyici seçeneği: /clr
Örnekler
// 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