欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 新车 > C++枚举类

C++枚举类

2025/5/2 6:10:19 来源:https://blog.csdn.net/Ethan_Rich/article/details/140060395  浏览:    关键词: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;  
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com