Share via


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 privateolabilecek 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, intuint32, int64, veya uint64olabilecek charbooltemel 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. Örnek:

  • 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 boolve 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 char16ve 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 privateolabilirpublic.

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 intshortgibi 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 structolmadanclass) 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

Ayrıca bkz.

.NET ve UWP İçin Bileşen Uzantıları