C++枚举类

在C++11及以后的版本中,引入了枚举类(也称为强类型枚举或作用域枚举),这是对传统枚举(C风格枚举)的一个改进。枚举类提供了更好的类型安全和作用域控制。

传统枚举(C风格枚举)

传统枚举在C++中类似于整数类型,但它们限制了可以赋给变量的值的集合。然而,它们没有类型安全性,并且它们的枚举值隐式地转换为整数。

enum Color { RED, GREEN, BLUE };  
Color c = RED; // 没问题  
int i = RED; // 隐式转换,也没有问题

枚举类(C++11及以后)

枚举类提供了更严格的类型检查和更好的作用域控制。枚举类类型不会隐式地转换为其他类型(除了用户定义的显式转换),并且枚举值的作用域被限制在枚举类内部。

enum class Color : unsigned int { RED, GREEN, BLUE };  
  
Color c = Color::RED; // 注意这里需要使用 Color:: 前缀  
// int i = RED; // 错误,RED 不在当前作用域内  
// int j = Color::RED; // 错误,没有隐式转换  
  
// 如果需要显式转换,可以这样做:  
unsigned int k = static_cast<unsigned int>(Color::RED);

在上面的例子中,Color 是一个枚举类,它的底层类型被指定为 unsigned int(虽然这是可选的,如果不指定,则默认为 int)。使用 Color::RED 来引用枚举值,并且由于类型安全性的提高,RED 不能隐式地转换为其他类型(如 int)。

枚举类的优点

  1. 类型安全:枚举类提供了更好的类型安全性,因为它们不会隐式地转换为其他类型。
  2. 作用域控制:枚举值的作用域被限制在枚举类内部,这有助于减少命名冲突。
  3. 底层类型控制:可以指定枚举类的底层类型(如 unsigned intchar 等)。
  4. 可读性和可维护性:使用枚举类可以使代码更具可读性和可维护性,因为它们提供了更清晰的意图和限制。
#include <iostream>  
  
enum class Color : unsigned char { RED, GREEN, BLUE };  
  
void printColor(Color c) {  
    switch (c) {  
        case Color::RED:  
            std::cout << "Red\n";  
            break;  
        case Color::GREEN:  
            std::cout << "Green\n";  
            break;  
        case Color::BLUE:  
            std::cout << "Blue\n";  
            break;  
        default:  
            std::cout << "Unknown color\n";  
            break;  
    }  
}  
  
int main() {  
    Color c = Color::RED;  
    printColor(c); // 输出 "Red"  
    return 0;  
}

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值