强类型枚举(枚举类)

5 篇文章 0 订阅
4 篇文章 0 订阅
本文介绍了C++11引入的强类型枚举类,相比于传统枚举,提供类型安全、作用域限制和底层类型选择,通过示例展示了其在编码中的应用和优势。
摘要由CSDN通过智能技术生成

为什么要有枚举类?

在C++11标准之前,枚举类型(enum)是C++语言中的一种基本数据类型,它允许为整数值赋予有意义的名称。然而,传统枚举存在一些问题,比如枚举成员的类型是int,这导致它们可以隐式转换为整数。另外,同名枚举成员存在冲突。

什么是枚举类?

C++11引入了强类型枚举(strongly-typed enums),也称为枚举类(enum classes)。它们与传统的C++枚举(enum)相比,提供了更好的类型安全和代码的可读性。强类型枚举的值不属于其枚举类型的转换作用域,这意味着它们不会自动转换为整数类型,也不会与整数类型自动比较。

枚举类的特点

  1. 类型安全:强类型枚举不允许隐式转换为整数类型或其他枚举类型。
  2. 作用域限制:枚举成员的作用域被限制在枚举类内部,这意味着它们不会与外部作用域的同名枚举成员冲突。
  3. 底层类型指定:可以指定强类型枚举的底层类型(如int, unsigned int等),如果不指定,则默认为int。

示例代码

#include <iostream>

// 定义一个强类型枚举
enum class Color {
    Red,    // 默认为0
    Green,  // 默认为1
    Blue    // 默认为2
};

// 定义一个带有底层类型的强类型枚举
enum class StatusCode : int {
    Ok = 200,    // 显式赋值为200
    NotFound = 404
};

int main() {
    // 使用强类型枚举
    Color c = Color::Red;
    
    // 尝试隐式转换为整数,编译错误
    // int i = c;

    // 显式转换为整数
    int i = static_cast<int>(c);
    std::cout << "Color Red as int: " << i << std::endl;

    // 使用作用域限定符访问枚举成员
    StatusCode status = StatusCode::NotFound;
    std::cout << "Status Code NotFound: " << static_cast<int>(status) << std::endl;

    // 枚举成员与整数的比较
    if (status == static_cast<StatusCode>(404)) {
        std::cout << "Status Code is NotFound." << std::endl;
    }

    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值