D 语言 - 枚举

枚举用于定义命名常量值。 枚举类型是使用 enum 关键字声明的。

枚举语法

枚举定义的最简单形式如下 −

enum enum_name {  
   enumeration list 
}

其中,

  • enum_name指定枚举类型名称。

  • 枚举列表是一个以逗号分隔的标识符列表。

枚举列表中的每个符号都代表一个整数值,该值比其前面的符号大 1。 默认情况下,第一个枚举符号的值为0。例如 −

enum Days { sun, mon, tue, wed, thu, fri, sat };

示例

下面的例子演示了枚举变量的使用 −

import std.stdio;

enum Days { sun, mon, tue, wed, thu, fri, sat };

int main(string[] args) {
   Days day;

   day = Days.mon;
   writefln("Current Day: %d", day); 
   writefln("Friday : %d", Days.fri); 
   return 0;
}

当上面的代码被编译并执行时,会产生以下结果 −

Current Day: 1 
Friday : 5

在上面的程序中,我们可以看到如何使用枚举。 最初,我们创建一个名为 day 的用户定义的枚举 Days 变量。 然后我们使用点运算符将其设置为 mon。 我们需要使用 writefln 方法来打印存储的 mon 的值。 您还需要指定类型。 它是整数类型,因此我们使用 %d 进行打印。

命名枚举属性

上面的示例使用名称 Days 进行枚举,称为命名枚举。 这些命名枚举具有以下属性 −

  • Init − 它初始化枚举中的第一个值。

  • min − 它返回枚举的最小值。

  • max − 它返回枚举的最大值。

  • sizeof − 它返回枚举的存储大小。

让我们修改前面的示例以利用这些属性。

import std.stdio;

// 初始化 sun 值为 1
enum Days { sun = 1, mon, tue, wed, thu, fri, sat };

int main(string[] args) { 
   writefln("Min : %d", Days.min); 
   writefln("Max : %d", Days.max);
   writefln("Size of: %d", Days.sizeof); 
   return 0; 
}

当上面的代码被编译并执行时,会产生以下结果 −

Min : 1
Max : 7
Size of: 4

匿名枚举

没有名称的枚举称为匿名枚举。 下面给出了匿名枚举的示例。

import std.stdio; 
 
// 初始化的 sun 值为 1
enum { sun , mon, tue, wed, thu, fri, sat }; 
 
int main(string[] args) { 
   writefln("Sunday : %d", sun); 
   writefln("Monday : %d", mon); 
   return 0; 
}

当上面的代码被编译并执行时,会产生以下结果 −

Sunday : 0
Monday : 1

匿名枚举的工作方式与命名枚举几乎相同,但它们没有 max、min 和 sizeof 属性。

具有基本类型语法的枚举

基本类型枚举的语法如下所示。

enum :baseType {  
   enumeration list 
}

一些基本类型包括 long、int 和 string。 下面显示了使用 long 的示例。

import std.stdio;
  
enum : string { 
   A = "hello", 
   B = "world", 
} 
  
int main(string[] args) { 
   writefln("A : %s", A); 
   writefln("B : %s", B); 
   
   return 0; 
}

当上面的代码被编译并执行时,会产生以下结果 −

A : hello
B : world

更多功能

D 中的枚举提供了诸如在具有多种类型的枚举中初始化多个值之类的功能。 下面显示了一个示例。

import std.stdio;
  
enum { 
   A = 1.2f,  // A is 1.2f of type float 
   B,         // B is 2.2f of type float 
   int C = 3, // C is 3 of type int 
   D          // D is 4 of type int 
}
  
int main(string[] args) { 
   writefln("A : %f", A); 
   writefln("B : %f", B); 
   writefln("C : %d", C); 
   writefln("D : %d", D);  
   return 0; 
}

当上面的代码被编译并执行时,会产生以下结果 −

A : 1.200000
B : 2.200000
C : 3
D : 4