C++: 枚举

枚举

枚举是C++中的一种基本数据类型,用于定义一组具有离散值的常量,它

以让数据更简洁,更易读。枚举是将一组整形常量组织在一起,所以和类的使用方法有一些类似之处。实际中经常使用枚举来做数据的标识,可以实现对数据的分类,类似于用TureFalse区分是与非,而枚举也可以在此基础上也用整形常量的方式对数据进行更多的分类。不论是哪种形式的枚举,它们都定义了一种独特的数据类型,可以用来创建变量,这些变量只能取预先定义好的枚举成员之一作为值。

1强枚举类型和弱枚举类型

C++中枚举类型分为弱枚举类型和强枚举类型,不论是哪种形式的枚举,它们都定义了一种独特的数据类型,可以用来创建变量,这些变量只能取预先定义好的枚举成员之一作为值。

弱枚举类型(Weak Enumerations),即使用enum关键字定义的传统枚举,其特点如下:

全局作用域:枚举成员处于定义它的作用域之外的全局作用域内,容易引起名称冲突。

隐式类型转换:枚举值可以隐式转换为整数,也可以和其他枚举类型进行比较,这可能导致意料之外的行为和错误。

较少的类型控制:没有强制要求枚举值的类型,这降低了类型的安全性。

语法:enum 枚举类型名 {枚举成员1, 枚举成员2, …}

#include<iostream>

using namespace std;

// 限定作用域的枚举类型

enum Season {

    Spring,

    Summer,

    Autumn,

    Winter

};

enum class MySeason {

    // 与枚举类型Season中的变量冲突,无法定义变量

    //Spring,

    //Summer,

    //Autumn,

    //Winter

};

int main() {

    // 使用枚举值

    Season currentSeason = Season::Spring;

    std::cout << "The integer value of current Season is: " << currentSeason << std::endl;

    return 0;

}

强枚举类型(Strongly Typed Enumerations)C++11引入的一种枚举类型,也称为enum class。与传统的枚举类型(通常称为弱枚举类型或无类型枚举、非类型安全枚举)相比,强枚举类型具有以下特点:

作用域限制:强枚举类型的枚举成员被限定在其定义的作用域内,不会污染全局命名空间,减少了命名冲突的可能性。

类型安全强枚举类型的值不会自动转换为整数或其他枚举类型,避免了无意中的类型混淆和错误的算术运算,增强了类型安全性。

明确的类型名称使用强枚举类型时,必须明确指定枚举类型名称,例如EnumType::EnumMember,这增加了代码的可读性和自我文档化性质。

语法:enum class 枚举类型名 {枚举成员1, 枚举成员2, …}

#include<iostream>

using namespace std;

// 不限定作用域的枚举类型

enum class Season {

    Spring,

    Summer,

    Autumn,

    Winter

};

enum class MySeason {

    Spring,

    Summer,

    Autumn,

    Winter

};

int main() {

    // 使用枚举值

    Season currentSeason = Season::Spring;

    MySeason mycurrentSeason = MySeason::Summer;

    // 注意:不能直接将enum class的值隐式转换为整数输出

    // 若要输出枚举值对应的整数,需要使用static_cast

    int currentSeasonValue = static_cast<int>(currentSeason);

    int mycurrentSeasonValue = static_cast<int>(mycurrentSeason);

    std::cout << "The integer value of current season is: " << currentSeasonValue << std::endl;

    std::cout << "The integer value of my current season is: " << mycurrentSeasonValue << std::endl;

    return 0;

}

  • 10
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小于小于大橙子

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

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

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

打赏作者

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

抵扣说明:

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

余额充值