ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

c-为什么我不能将枚举作为另一个枚举的基础类型?

2019-10-11 09:09:23  阅读:164  来源: 互联网

标签:subclassing c c11 enums


为什么这个无效的C?

enum foo : unsigned { first_foo, second_foo };
enum bar : foo { best_foo = first_foo };

GCC 5.4.0说:

/tmp/a.cpp:3:16: error: underlying type ‘foo’ of ‘bar’ must be an integral type
     enum bar : foo { best_foo = first_foo };

我能理解,如果foo是浮点数,某种结构或诸如此类的东西,为什么会出现此错误.但这在语义,类型安全性等方面对我来说似乎是完全合法的.我想念的是什么?

解决方法:

当您将事物添加到C时,您倾向于添加解决问题的最小值.

枚举A:int语法使您可以精确指定枚举A如何存储为整数.这就是它的全部,它可以解决问题.

枚举A:B,其中B是枚举可能具有多种含义. A可以扩展B,或者A可以是具有不同名称的B底层类型的子集,或者A可以是严格限制为具有可存储在B内的值的子集的枚举,或者A可以是其值的枚举限于B值的“船体”.

其中,“相同的基础类型”解决方案(使用:int语法)与枚举A:std :: underlying_type_t< B>对齐.因此,已经有一种方法可以做到这一点,并且它并不是特别繁重.

在有人提出枚举A:B的含义并说服委员会足够多的建议之前,它不太可能被允许.而且,当存在多种不同的合理含义时,这将更难选择任何一种含义.人们将需要一个强有力的用例,为什么一个特定的含义是最好的,为什么要把它放入标准中是值得的.

标签:subclassing,c,c11,enums
来源: https://codeday.me/bug/20191011/1891330.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有