MFC/VC/C++ enmu枚举类型的for循环

本文展示了一个简单的枚举类型定义及其遍历方法。通过一个名为 MyEnum 的枚举类型,定义了四个状态:开始、中间、接近结束及结束,并演示了如何使用 for 循环遍历这些状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

enum MyEnum
    {
        start= 0,
        middle= 1,
        beforeend = 2,
        end = 3,
    }
     for (MyEnum   i = MyEnum.start; i <= MyEnum.end; i++)
     {
        //do something here
     }

### C++ 中 `enum` 的基本用法 在 C++ 中,`enum` 是一种用于定义一组命名整数常量的关键字。它使得程序更加可读并减少了硬编码数值的使用。以下是关于 `enum` 基本用法及其改进版本 `enum class` 的详细介绍。 #### 1. **传统 `enum`** 传统 `enum` 定义了一组具有相同类型的常量集合,这些常量默认从 `0` 开始依次递增[^2]。如果需要指定特定值,则可以通过赋值操作完成。 ```cpp #include <iostream> using namespace std; // 定义一个枚举类型 enum Days { Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday }; int main() { Days today = Wednesday; // 输出对应的整数值 cout << "Today is day number: " << static_cast<int>(today) << endl; return 0; } ``` 在此示例中,未显式初始化任何成员,默认情况下它们会被赋予连续的整数值,即 `Monday=0`, `Tuesday=1`, ..., `Sunday=6`. #### 2. **带有初始值的 `enum`** 可以为某些枚举项设置具体值: ```cpp #include <iostream> enum Numbers { One = 1, Two, Three, Five = 5, Six }; int main() { cout << "Two: " << Two << ", Six: " << Six << endl; // 输出:Two: 2, Six: 6 return 0; } ``` 这里可以看到,当指定了部分值之后,后续项目将继续自增计数直到再次遇到新的设定为止[^4]. #### 3. **遍历 `enum` 成员(有条件)** 虽然标准C++并不支持直接迭代整个枚举列表,但如果所有的枚举器都是连续分配的话,就可以利用这一特性来进行模拟循环访问: ```cpp #include <iostream> using namespace std; enum Colors { Red = 1, Green, Blue }; void printColor(Colors color){ switch(color){ case Red : cout<<"Red"; break; case Green : cout<<"Green";break; default: cout<< "Blue"; } } int main(){ for(int i=Red;i<=Blue;++i){ printColor((Colors)i); cout<<"\n"; } return 0; } ``` 注意这种方法依赖于编译器行为以及程序员自己维护好序列关系,因此存在一定的风险. #### 4. **强类型的安全性——`enum class`** 为了克服传统 `enum` 存在的一些缺陷比如缺乏作用域隔离等问题,C++11 引入了 `enum class`. 这种新型态提供了更强健的功能集. - 需要完全限定名称才能引用其中某个元素. - 自动启用严格类型转换机制防止意外混用不同种类的数据结构. ```cpp #include <iostream> using namespace std; enum class Status{ Success, Failure, Pending }; int main(){ Status s =Status::Success ; if(s==Status::Failure ){ cerr <<"Operation failed!"<<endl; }else{ cout<<"Operation succeeded."<<endl; } /* 下面这行会产生错误因为两者属于不同的类别 */ //if(Status::Pending == true){...} return 0; } ``` 此段代码展示了如何创建一个新的状态分类,并且演示了即使布尔表达式的上下文中也不会隐式地将其他数据形式解释为我们新建立出来的这个类别的实例[^3]. --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Afterwards_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值