C++11中枚举与联合的高级应用
191 浏览量
更新于2024-08-31
收藏 98KB PDF 举报
结合C++11的新特性来解析C++中的枚举与联合
C++中的枚举(Enumeration)是一种用户定义的类型,其中包含一组称为枚举器的命名的整型常数。枚举的主要用途是提供上下文来描述以命名常数表示的一系列值,这些值也称为枚举器。在 C++11 中,枚举类型可以分为两种: scoped enum 和 unscoped enum。
Scoped Enum(强类型枚举)
Scoped enum 是一种新的枚举类型,引入于 C++11。它具有以下特点:
* 使用 enum class 关键字声明
* 枚举器名称必须由枚举类型名称限定
* 可以指定基础类型
* 可以 forward declare
例如:
```cpp
enum class Suit { Diamonds, Hearts, Clubs, Spades };
void playCard(Suit suit) {
if (suit == Suit::Clubs) { /**/ }
}
```
Unscoped Enum(非限定枚举)
Unscoped enum 是一种传统的枚举类型,在 C++11 之前已经存在。它具有以下特点:
* 使用 enum 关键字声明
* 枚举器名称在整个范围中可见
* 无法指定基础类型
* 无法 forward declare
例如:
```cpp
enum Suit { Diamonds, Hearts, Clubs, Spades };
void playCard(Suit suit) {
if (suit == Clubs) { /**/ }
}
```
C++11 中的新特性 - 范围(或强类型)enum class
C++11 中引入了范围(或强类型)enum class,解决了传统枚举类型的一些问题。enum class 具有以下特点:
* 使用 enum class 关键字声明
* 枚举器名称必须由枚举类型名称限定
* 可以指定基础类型
* 可以 forward declare
* 防止枚举器名称污染
例如:
```cpp
enum class Suit : int { Diamonds, Hearts, Clubs, Spades };
```
联合(Union)
联合是一种特殊的用户定义类型,它可以存储不同类型的值。联合的主要用途是提供一种灵活的方式来存储和操作不同的数据类型。C++ 中的联合可以分为两种:匿名联合和命名联合。
匿名联合
匿名联合是一种没有名称的联合,不能单独使用,但可以作为结构体的成员。
例如:
```cpp
struct {
int a;
union {
int b;
float c;
} u;
} s;
```
命名联合
命名联合是一种有名称的联合,可以单独使用。
例如:
```cpp
union Color {
int red;
float green;
} c;
```
C++11 中的新特性 - 范围(或强类型)union class
C++11 中引入了范围(或强类型)union class,解决了传统联合类型的一些问题。union class 具有以下特点:
* 使用 union class 关键字声明
* 可以指定基础类型
* 可以 forward declare
* 防止联合成员名称污染
例如:
```cpp
union class Color : int { red; float green; };
```
C++11 中的枚举和联合类型提供了一种灵活的方式来描述和操作不同的数据类型。Scoped enum 和 union class 是 C++11 中的新特性,提供了更好的类型安全和可读性。
2021-09-29 上传
2019-03-13 上传
点击了解资源详情
点击了解资源详情
点击了解资源详情
2014-11-26 上传
点击了解资源详情
2024-12-25 上传
weixin_38739164
- 粉丝: 8
- 资源: 951
最新资源
- emf37.github.io
- 提取均值信号特征的matlab代码-Chall_21_SUB_A5:Chall_21_SUB_A5
- ng-recipe:角度的食谱应用程序
- sift,单片机c语言实例-源码下载,c语言程序
- artoolkit-example-fucheng
- json-tools:前端开发工具
- -:源程序代码,网页源码,-源码程序
- 04_TCPFile.rar
- 凡诺企业网站管理系统PHP
- 事件
- ads-1,c语言中ascii码与源码,c语言程序
- lilURL网址缩短程序 v0.1.1
- module-ballerina-random:Ballerina随机库
- nova-map-marker-field:提供用于编辑纬度和经度坐标的可视界面
- Crawler-NotParallel:C语言非并行爬虫,爬取网页源代码并进行确定性自动机匹配和布隆过滤器去重
- 分析安装在Android上的程序的应用程序