请详细介绍C加加的强类型枚举
时间: 2023-09-10 16:07:30 浏览: 98
C++11引入了强类型枚举(enum class),也称为枚举类。强类型枚举是一种更加类型安全的枚举类型,相对于传统的枚举类型,强类型枚举可以提供更好的封装性和可读性。
强类型枚举的定义方式为:
```cpp
enum class EnumName {
EnumValue1,
EnumValue2,
EnumValue3,
// ...
};
```
其中,EnumName 是枚举类型的名称,EnumValue1、EnumValue2、EnumValue3 等是枚举类型的取值。与传统的枚举类型不同的是,强类型枚举的取值是不会自动转换为整型的。
例如,下面的代码定义了一个强类型枚举:
```cpp
enum class Color {
RED,
GREEN,
BLUE
};
```
由于是强类型枚举,因此不能将 Color 型的值直接赋值给整型变量,这样会导致编译错误:
```cpp
int i = Color::RED; // 编译错误
```
需要使用 static_cast 进行显式转换:
```cpp
int i = static_cast<int>(Color::RED);
```
强类型枚举还可以指定底层类型,例如:
```cpp
enum class Color : unsigned char {
RED,
GREEN,
BLUE
};
```
这样,Color 类型的取值实际上是 unsigned char 类型的。
强类型枚举的另一个优点是避免了命名冲突。例如,传统的枚举类型可能会出现以下情况:
```cpp
enum Color {
RED,
GREEN,
BLUE
};
enum Size {
SMALL,
MEDIUM,
LARGE
};
```
如果要定义一个红色小尺寸的物品,可能会这样写:
```cpp
Color c = RED;
Size s = SMALL;
```
但是,由于 RED 和 SMALL 都是 int 类型的 0,因此这样的代码会出现命名冲突。使用强类型枚举可以避免这种情况的发生:
```cpp
enum class Color {
RED,
GREEN,
BLUE
};
enum class Size {
SMALL,
MEDIUM,
LARGE
};
Color c = Color::RED;
Size s = Size::SMALL;
```
阅读全文
相关推荐
![-](https://img-home.csdnimg.cn/images/20241231044930.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![-](https://img-home.csdnimg.cn/images/20250102104920.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![.zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![-](https://img-home.csdnimg.cn/images/20241231044937.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)