个人理财 C ++中的强类型枚举 - 虚拟

C ++中的强类型枚举 - 虚拟

视频: Lesson1 Rust概述 2024

视频: Lesson1 Rust概述 2024
Anonim

编程是关于可读性的。编写和维护一个你看不懂的程序是很困难的(实际上是不可能的)。阅读源代码清单的一部分是了解程序中使用的数字是什么。 C ++提供的最基本的帮助就是无处不在的#define,就像在下面经常引用的例子中一样:

#define PI 3. 141592653589793

这个解决方案对于单个值是可以的,尽管它受到#define机制不是(严格来说)C / C ++的一部分,因为预处理器在编译器之前运行。为此,C ++ 2011引入了 常量表达式 结构:

<! - 1 - >
constexpr long double PI = 3. 141592653589793;

constexpr关键字将常量引入C ++帐户。这个PI有一个真正的类型,就像其他的C ++变量一样。 C ++可以使用PI生成错误消息,这些消息比涉及3的错误消息更有意义。14159.

常量表达式适用于各个常量值,但常常表示常量集而不是常量,如下例所示:

<! - 2 - >
#define DC_OR_TERRITORY 0 #define ALABAMA 1 #define ALASKA 2 #define ARKANSAS 3 // …等等…

推测这些常量被用来标识状态,可能被用作一个状态对象数组的索引或某个数据库中的某个值。 C ++一直有一个改进的机制来定义这些类型的常量 - 枚举:

enum STATE {DC_OR_TERRITORY,//获得0 ALABAMA,//获得1个ALASKA,//获得2个ARKANSAS,// …和等等…};

enum关键字引入了一个称为“枚举”的常量序列。在这种情况下,枚举带有名称STATE。这个枚举的每个元素都被分配一个从0开始的值,然后依次递增1,所以DC_OR_TERRITORY被定义为0,ALABAMA被定义为1,依此类推。您可以通过使用assign语句来覆盖此增量排序,如下所示:

<! - 1 - >

枚举STATE {DC,TERRITORY = 0,ALABAMA,ALASKA,// …等等…};
这个版本的STATE定义了一个元素DC,它的值是0.然后定义一个新的元素TERRITORY,它也被赋值为0,ALABAMA从1开始,就像以前一样。实际上,程序员可以使用枚举来编写相当可读的代码,如下所示:

double taxRate(STATE s){return taxRatesByState [s];}

这种方法的唯一问题是枚举不会创建一个新的类型(如你所想的)。实际上,根据标准,STATE只是int的另一个名字,常量ALABAMA,ALASKA等都是const int类型的。


<! gcc编译器实际上确实提供了一个枚举,这样声明的枚举比简单的调用它的另一种形式的权限多了一点点。你实际上可以根据枚举类型重载函数:

void fn(STATE s); void fn(int n); FN(阿拉斯加州); //调用fn(STATE)

2011标准允许程序员使用enum关键字创建一个全新的类型。由于新标准的创建者不想破坏现有的代码,因此标准需要添加一个额外的关键字来定义枚举类型,如下例所示:

枚举类STATE {DC,TERRITORY = 0,ALABAMA,ALASKA,// …等等…};枚举类现在是像任何其他用户定义的类一样的全尺寸类型。以下是甚至不合法的原因有两个:

int s = ALASKA;首先,常量ALASKA只在STATE命名空间中定义。因此,这个常量的名字是STATE::ALASKA。其次,类型不是int,而是STATE。您不能将类型STATE的值分配给int。

<! --1 - >
STATE s = STATE::ALASKA;

程序员可以将一个STATE重新写入一个int,但是她必须明确地这样做 - 明确的转换不会用枚举类来削减它:int n =(int)STATE::ALASKA;

这个新的枚举类型也可以基于除了int以外的其他计数类型之一:

enum class STATE:char {DC,// …其余的声明是相同的

C ++中的强类型枚举 - 虚拟

编辑的选择

添加新的SketchUp图层并在图层之间移动实体 - 虚拟图层

添加新的SketchUp图层并在图层之间移动实体 - 虚拟图层

是SketchUp非常有用的一部分,他们可以让你的生活变得更轻松。以下是如何在Sketchup中添加新图层以及如何将实体移动到不同图层的方法。添加新图层按照以下步骤将图层添加到SketchUp文件:选择“窗口”→“图层”。图层...

全部关于地理位置快照和SketchUp - 虚拟

全部关于地理位置快照和SketchUp - 虚拟

当您将地理位置快照导入SketchUp ,您可以访问Google庞大的地理数据存储库;快照不仅仅是漂亮的图片:导入快照地理位置自动定位您的位置。这意味着快照设置您的模型的经纬度,并定位在正确的主要方向。任何阴影研究你...

如何在SketchUp中使用场景动画区域

如何在SketchUp中使用场景动画区域

将区域视图与场景组合在一起以创建动画展示您的SketchUp模型都是一种有用且令人印象深刻的方式。基本的想法是,您可以使用场景来创建动画,其中您的剖面在您的模型中移动。以下是您可能需要使用此技巧的几个原因:如果...

编辑的选择

Drupal友好的网页寄存公司 - 傻瓜

Drupal友好的网页寄存公司 - 傻瓜

网页寄存公司为您提供访问Web服务器,您可以在其中安装Drupal并使您的网站在Web上可见。一些公司为您安装Drupal或为您提供一键安装,为您节省了一些工作量。如果您决定自己跳过Drupal的安装,请考虑通过以下方式之一获取帐户...

Drupal花园功能 - 傻瓜

Drupal花园功能 - 傻瓜

让您有机会查看和使用所有Drupal花园功能,可以创建一个新的站点,然后选择自定义选项而不是其中一个已安装的模板:确保已经登录,然后单击我的站点链接。这样做打开了Drupal花园站点经理。点击创建...

Drupal园林主题生成器 - 傻瓜

Drupal园林主题生成器 - 傻瓜

Drupal花园设置完成后,有一些乐趣和玩你的网站上的主题。使用Drupal Gardens Theme Builder控制网站的外观是与安装Drupal自身副本不同的主要方式。但是你不会错过太多...

编辑的选择

上一次显示一张照片(全屏播放)如何在您的照片上一次显示一张照片(全屏播放)尼康D5300 - 傻瓜

上一次显示一张照片(全屏播放)如何在您的照片上一次显示一张照片(全屏播放)尼康D5300 - 傻瓜

很可能您已经在尼康D5300上播放了播放模式。但是,在数码相机上查看照片有不同的选项。对于正常播放 - 即每次只能查看一张照片 - 请执行以下步骤:

如何自定义尼康D3300的优化校准 - 傻瓜

如何自定义尼康D3300的优化校准 - 傻瓜

当您使用尼康D3300的内置原始处理器,您可以尝试不同的优化校准设置,了解每个设置对图像的影响。当您使用免费的Nikon软件Nikon ViewNX处理图像时,您可以选择相同的选项。该程序的原始转换器,以及在Adobe Photoshop中找到的那些...

如何在HDMI屏幕上显示实时预览预览 - 假人

如何在HDMI屏幕上显示实时预览预览 - 假人

尼康D7100相机连接到HDMI(高清晰度多媒体接口)设备,以在该屏幕上查看实时显示输出。摄影师经常使用此功能,因为摄影师需要比相机显示器提供更大的主题。使用此选项时,会出现一些问题:...