枚举enum

        在程序设计中,我们经常需要用到一组相关常量,这些常量表示一些有限的状态或取值范围。例如:星期、异常码。为了提高代码的可读性和可维护性,避免硬编码,引入枚举称为一种常见的数据类型。

C/C++中枚举定义

enum Color{
    RED = 1,  // 默认0开始,递增
    YELLO,
    BLUE
};

枚举经典做法

传统定义枚举的行为会有如下问题

  • 作用域不受限,命名冲突。
  • 会隐式转换为int
  • 用来表征枚举变量的实际类型不能明确指明,从而无法支持枚举类型的前向声明。

C++的枚举类型的特性使得无法像类或结构体那样灵活地进行前向声明,因为它缺乏明确的类型信息。

#include <iostream>
using namespace std;

enum COLOR{ RED, BLUE };
enum WINE {RED, BAIJIU};
int main() {
	WINE wine = RED;  // 报错,编译器分不清RED是Color 还是 WINE
    COLOR color = BLUE; // 正确
    cout << wine << " " << color;
	return 0;
}

 

一般来说,为了一致性,通常会在所有常量前加上前缀。C程序中不得不这样做,但在C++中的替代方法是命名空间

#include <iostream>
using namespace std;
namespace space1 {
	enum COLOR { RED, BLUE };
};
namespace space2 {
	enum WINE { RED, BAIJIU };
}

int main() {
	space1::COLOR color = space1::RED;
	space2::WINE wine = space2::RED;
	cout << color << " " << wine << endl;
	return 0;
}

更为有效的办法是使用一个类或结构体限定器作用域。

强类型枚举(enum class)

C++11的新语法,解决传统C++枚举类型的缺陷。解决了上述枚举常量暴漏在外层作用域中,造成命名冲突的问题,并且不可以隐式转换成其他类型。

#include <iostream>
using namespace std;
enum class Color
{
	RED = 2,
	YELLO,
	GREEN,
};

int main() {
	Color c2 = Color::YELLO;
	//cout << c2 << endl; // errno
	cout << static_cast<int>(c2) << endl; // 强制转换
	return 0;
}

可以用指定类型来存储enum

#include <iostream>
#include <string>
using namespace std;
enum class Color:char;
enum class Color :char
{
	RED = 'r',
	BLUE
};

int main() {
	char c = static_cast<char>(Color::RED);
	cout << c << '\n';
	char b = static_cast<char>(Color::BLUE);
	cout << b << '\n';
	return 0;
}

### 枚举enum)在编程中的用法 枚举类型是一种用户自定义的数据类型,通常用于表示一组固定的常量集合。这种数据结构可以提高程序的可读性和可维护性[^2]。 #### Java 中的 Enum 使用 在 Java 中,`enum` 是一种特殊的类,它可以被看作是一个具有固定成员列表的类。这些成员通常是不可变的对象实例。由于 `enum` 的特性,它们可以直接用于 `switch` 语句中[^1]: ```java public class Main { public static void main(String[] args) { DayOfWeek day = DayOfWeek.MONDAY; switch (day) { case MONDAY: System.out.println("Start of the work week."); break; case FRIDAY: System.out.println("End of the work week."); break; default: System.out.println("Another day..."); } } enum DayOfWeek { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY } } ``` 上述代码展示了如何利用 `enum` 定义一周的日子,并将其作为参数传递给 `switch` 语句来执行不同的逻辑操作。 #### C/C++ 中的 Enum 使用 在 C 和 C++ 编程语言里,`enum` 关键字主要用于创建一系列命名整数常量。尽管不像高级语言那样功能强大,但它仍然有助于增强代码清晰度和减少错误可能性[^3]: ```c #include <stdio.h> int main(void){ enum Color { RED=0xFF0000, GREEN=0x00FF00, BLUE=0x0000FF }; int selectedColor = GREEN; if(selectedColor == RED){ printf("#%X\n",RED); }else if(selectedColor == GREEN){ printf("#%X\n",GREEN); }else{ printf("#%X\n",BLUE); } return 0; } ``` 在这个例子中,我们定义了一个名为 `Color` 的枚举类型并初始化了一些颜色值。接着通过简单的条件判断打印出对应的颜色十六进制码。 #### Python 中的 Enum 使用 从 Python 3.4 开始引入了标准库模块 `enum` 来支持枚举类型的声明与使用;而在 Python 3.10 及之后版本,则进一步增强了内置的支持程度使其更接近传统意义上的枚举行为模式: ```python from enum import Enum class Season(Enum): SPRING = 'spring' SUMMER = 'summer' AUTUMN = 'autumn' WINTER = 'winter' def describe_season(season:Season)->str: match season.name.lower(): case "spring": description="Flowers bloom." case "summer": description="Sun shines brightly." case _ : description=f"{season.value.capitalize()} weather is here!" return f"In {season.name}, "+description print(describe_season(Season.SPRING)) ``` 这里演示了怎样借助于新加入的关键字 `match-case`(类似于其他语言里的 `switch`) 结合枚举变量一起工作以生成季节描述字符串。 --- ### 总结 无论是在哪种主流编程语言环境下,合理运用好枚举类型都能让我们的源代码变得更加直观易懂同时也降低了潜在风险因素的存在几率。以上分别介绍了几种不同风格的语言对于该特性的具体实践方法论及其优势所在之处.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值