C++11新特性之enum class

1.介绍

        enum class是C++11引入的有作用域的枚举类型。与传统的enum不同,enum class的枚举值不会隐式转化为整数,也不会污染全局命名空间。必须通过作用域解析运算符(::)来访问枚举值。

2.enum class的用法 

enum class KeyMode: int
{
    NORMAL = 1,
    VIM
};

        enum class:关键字,写在最前边。

        KeyMode:这是枚举类型的名称。

        :int:指定枚举的底层类型。这里是int,意味着枚举值在内存中以int类型存储。你也可以指定其他的底层类型,例如 char 、float等。

        枚举值:第一个枚举值被显式设置为1,第二个枚举值被隐式设置为2。

        示例:

#include <iostream>

enum class KeyMode : int
{
    NORMAL = 1,
    VIM
};

int main() {
    // 定义一个 KeyMode 类型的变量
    KeyMode mode = KeyMode::NORMAL;

    // 使用枚举值进行判断
    if (mode == KeyMode::NORMAL) {
        std::cout << "Normal mode is active." << std::endl;
    } 

    // 访问枚举值的底层整数值
    std::cout << "Value of mode: " << static_cast<int>(mode) << std::endl;

    return 0;
}

        输出为

Normal mode is active.
Value of mode: 1

3.特点

        (1)作用域访问:枚举值必须通过KeyMode::NORMAL这样的方式访问,避免了传统enum的全局命名空间污染问题。

        (2)类型安全:enum class 不会隐式转换为整数,避免了潜在的错误。如果需要转化为整数,必须显示使用static_cast<int>。

        (3)底层类型:通过: int指定底层类型为int,但可以根据需要改成其他类型。

        (4)枚举值的初始化:可以显示指定枚举值的整数值,也可以让编译器自动分配。

4.与传统enum的区别

特点enum class(C++11)enum(传统C-style)
作用域有作用域(必须使用::访问)无作用域(全局可见)
隐式转换不会隐式转换为整数运行隐式转换为整数
底层类型可以指定底层类型底层类型由编译器决定
命名冲突不会污染全局命名空间可能污染全局命名空间

5.总结

        enum class是C++11引入的一种强类型、有作用域的枚举类型。它的设计更加安全和清晰,更符合现代C++编程。

如有错误,敬请指正!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值