Bagikan melalui


Cara: Menentukan dan menggunakan enum di C++/CLI

Jenis enumerasi di C++/CLI memiliki beberapa perbedaan dengan jenis enumerasi di C++standar. Artikel ini menjelaskan cara menggunakan jenis enumerasi C++/CLI dan cara beroperasi dengan jenis enumerasi standar.

Menentukan jenis yang mendasar dari enum

Secara default, jenis enumerasi yang mendasar adalah int. Namun, Anda dapat menentukan jenis yang akan ditandatangani atau tidak ditandatangani dari int, , short, long__int32, atau __int64. Anda juga dapat menggunakan char.

// mcppv2_enum_3.cpp
// compile with: /clr
public enum class day_char : char {sun, mon, tue, wed, thu, fri, sat};

int main() {
   // fully qualified names, enumerator not injected into scope
   day_char d = day_char::sun, e = day_char::mon;
   System::Console::WriteLine(d);
   char f = (char)d;
   System::Console::WriteLine(f);
   f = (char)e;
   System::Console::WriteLine(f);
   e = day_char::tue;
   f = (char)e;
   System::Console::WriteLine(f);
}

Hasil

sun
0
1
2

Cara mengonversi antara enumerasi terkelola dan standar

Tidak ada konversi standar antara enum dan jenis integral; sebuah cast diperlukan.

// mcppv2_enum_4.cpp
// compile with: /clr
enum class day {sun, mon, tue, wed, thu, fri, sat};
enum {sun, mon, tue, wed, thu, fri, sat} day2; // unnamed std enum

int main() {
   day a = day::sun;
   day2 = sun;
   if ((int)a == day2)
   // or...
   // if (a == (day)day2)
      System::Console::WriteLine("a and day2 are the same");
   else
      System::Console::WriteLine("a and day2 are not the same");
}

Hasil

a and day2 are the same

Operator dan enum

Operator berikut ini valid pada enum di C++/CLI:

Operator
== != < > <= >=
+ -
| ^ & ~
++ --
sizeof

|Operator , , ^&, ~, ++, dan -- didefinisikan hanya untuk enumerasi dengan jenis yang mendasar integral, tidak termasuk bool. Kedua operan harus dari jenis enumerasi.

Pengkompilasi tidak melakukan pemeriksaan statis atau dinamis dari hasil operasi enum; operasi dapat mengakibatkan nilai yang tidak berada dalam rentang enumerator enum yang valid.

Catatan

C++11 memperkenalkan enum class jenis dalam kode yang tidak dikelola, yang secara signifikan berbeda dari jenis terkelola enum class di C++/CLI. Secara khusus, jenis C++11 enum class tidak mendukung operator yang sama dengan jenis terkelola enum class di C++/CLI, dan kode sumber C++/CLI harus menyediakan penentu aksesibilitas dalam enum class deklarasi terkelola untuk membedakannya dari deklarasi yang tidak dikelola (C++11). enum class Untuk informasi selengkapnya tentang enum class penggunaan di C++/CLI, C++/CX, dan C++11, lihat enum class.

// mcppv2_enum_5.cpp
// compile with: /clr
private enum class E { a, b } e, mask;
int main() {
   if ( e & mask )   // C2451 no E->bool conversion
      ;

   if ( ( e & mask ) != 0 )   // C3063 no operator!= (E, int)
      ;

   if ( ( e & mask ) != E() )   // OK
      ;
}

Gunakan kualifikasi cakupan untuk membedakan antara enum nilai dan enum class :

// mcppv2_enum_6.cpp
// compile with: /clr
private enum class day : int {sun, mon};
enum : bool {sun = true, mon = false} day2;

int main() {
   day a = day::sun, b = day::mon;
   day2 = sun;

   System::Console::WriteLine(sizeof(a));
   System::Console::WriteLine(sizeof(day2));
   a++;
   System::Console::WriteLine(a == b);
}

Hasil

4
1
True

Lihat juga

enum class