Aracılığıyla paylaş


enum sınıfı (C++ Bileşen Uzantıları)

Numaralandırıcı denilen bir sabitler kümesinden oluşan bir kullanıcı tanımlı tür olan bir sabit listesi bildirir.

Tüm Çalışma Zamanları

Notlar

C++/CX ve C++/CLI standart C++ numaralama sınıfına benzer olan ama erişilebilirlik belirticisi eklenmiş public enum class ve private enum class destekler.Eski standart C++ anahtar sözcüğü, enum, hakkında daha fazla bilgi için, bkz. C++ numaralandırma bildirimleri.

Windows Çalışma Zamanı

Sözdizimi

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

Parametreler

  • access
    Sabit listesinin erişilebilirliği, public ya da private olabilir.

  • enumeration-identifier
    Sabit listesinin adı.

  • underlying-type
    (İsteğe bağlı) Sabit listesinin temel türü.

    (İsteğe bağlı.yalnızca Windows Çalışma Zamanı ) Sabit listesinin temel türü, bool, char, char16, int16, uint16, int, uint32, int64 ya da uint64 olabilir.

  • enumerator-list
    Numaralandırıcı adlarının virgülle ayrılmış bir listesi.

    Her numaralandırıcının değeri ya derleyici tarafından örtük olarak, ya da gösterim tarafından açıkça tanımlanan bir sabit ifadedir, enumerator=constant-expression.Varsayılan olarak, eğer örtük olarak tanımlanmışsa ilk numaralandırıcının değeri sıfırdır.Sonraki her örtük olarak tanımlanan numaralandırıcının değeri önceki numaralandırıcının değeri + 1'dir.

  • var
    (İsteğe bağlı) Sabit listesi türünün bir değişkeninin adı.

Notlar

Daha fazla bilgi ve örnekler için, bkz. Enums.

Eğer bir numaralandırıcın değerini tanımlayan sabit ifade underlying-type ile temsil edilemiyorsa derleyicinin hata iletileri göstereceğine dikkat edin.Ancak, derleyici temel tür için uygulan olmayan bir değer için bir hata göstermez.Örne?in:

  • Eğer underlying-type sayısal ise, ve bir numaralandırıcı bu tür için en büyük değeri belirtiyorsa, sonraki örtük olarak tanımlanan numaralandırıcının değeri temsil edilemez.

  • Eğer underlying-typebool ise, ve ikiden daha fazla numaralandırıcı örtük olarak tanımlanmış ise, ilk iki numaralandırıcıdan sonrakiler temsil edilemez.

  • Eğer underlying-typechar16 ise, ve sabit listesi değer aralığı 0xD800 ile 0xDFFF arasında ise, değer temsil edilebilir.Ancak, değer mantıksal olarak yanlıştır çünkü bir Unicode yedek çiftinin yarısını temsil eder ve yalıtımda görünmemelidir.

a6cskb49.collapse_all(tr-tr,VS.110).gifGereksinimler

Derleyici seçeneği: /ZW

Ortak Dil Çalışma Zamanı

Sözdizimi

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

Parametreler

  • access
    Numaralamanın erişilebilirliği.public ya da private olabilir.

  • enumerator-list
    Sabit listesindeki tanımlayıcıların (numaralandırıcıların) virgülle ayrılmış bir listesi.

  • name
    Sabit listesinin adı.Anonim yönetilen sabit listelerine izin verilmez.

  • type (isteğe bağlı)
    identifiers için temel tür.Bir herhangi bir skalar tür olabilir, örneğin int, short ya da long'un imzalı ya da imzasız şekilleri.bool ya da char türlerine de izin verilir.

  • var (isteğe bağlı)
    Sabit listesi türünün bir değişkeninin adı.

Notlar

enum class ve enum struct eşdeğer tanımlamalardır.

İki tür numaralandırma vardır: yönetilen ve standart.

Bir yönetilen numaralandırma aşağıdaki gibi tanımlanabilir,

enum class day {sun, mon };

ve anlam olarak aşağıdakine eşdeğerdir:

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

Bir standart numaralandırma aşağıdaki gibi tanımlanabilir:

enum day2 {sun, mon, };

ve anlam olarak aşağıdakine eşdeğerdir:

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

Yönetilen numaralandırıcı adları (identifiers) sabit listesinin tanımlandığı kapsam içine eklenmez; numaralandırıcılara yapılan tüm başvurular tam nitelendirilmiş olmalıdır (name::identifier).Bu nedenle, anonim bir yönetilen numaralandırma tanımlayamazsınız.

Bir standart numaralandırmanın numaralandırıcıları içeren kapsama güçlü şekilde eklenir.Yani, eğer içeren kapsamda numaralandırıcı ile aynı ada sahip başka bir sembol var ise, derleyici bir hata üretir.

Visual C++ 2002 ve Visual C++ 2003 içinde, numaralandırıcılar zayıf olarak eklenirdi (içeren kapsamda aynı ada sahip başka bir tanımlayıcı olmadığı sürece görünür).

Eğer bir standart C++ numaralaması tanımlanırsa ( class ya da structolmayan), /clr ile derlemek sabit listesinin bir yönetilen numaralama olarak derlenmesine neden olur.Sabit listesi hala bir yönetilmeyen sabit listesinin semantiğine sahiptir.Bir programlamacının numaralamanın yerel bir numaralama olması isteğini tanımlamak için derleyicinin Visual C++ derleyicisinin tanıyacağı Microsoft::VisualC::NativeEnumAttribute özniteliğini eklediğine dikkat edin.Diğer derleyiciler standart numaralamayı bir yönetilen numaralama olarak görür.

/clr ile derlenmiş adlandırılmış bir standart numaralama derleme bir yönetilen numaralama olarak görünür, ve herhangi bir başka yönetilen derleyici tarafından kullanılabilir.Ancak, adlandırılmamış bir standart numaralama derlemeden genel olarak görünür olmaz.

Visual C++ 2002 ve Visual C++ 2003 içinde, bir standart numaralama bir işlev parametresinde tür olarak kullanılır:

// 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 içinde aşağıdakini gösterir:

void f(int32);

Ancak, derleyicinin geçerli sürümlerinde, standart numaralama bir [NativeEnumAttribute] ile bir yönetilen numaralama olarak ve işlev imzası için MSIL içinde aşağıdaki şekilde gösterilir:

void f(E)

Yerel numaralamalar hakkında daha fazla bilgi için, bkz. C++ Sabit Liste Tanımlamaları.

Geliştirme ortamında, bu anahtar sözcükler için anahtar sözcüğü vurgulayarak (örneğinenum class) ve F1'e basarak bu anahtar sözcüklerle ilgili F1 yardımı alabilirsiniz.

CLR numaralamaları hakkında daha fazla bilgi için, bkz:

a6cskb49.collapse_all(tr-tr,VS.110).gifGereksinimler

Derleyici seçeneği: /clr

a6cskb49.collapse_all(tr-tr,VS.110).gifÖrnekler

Örnek

desc

// 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)

Çıktı

  
  
  
  

Ayrıca bkz.

Kavramlar

Çalışma platformları için bileşen uzantıları