加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C 11枚举类实例化

发布时间:2020-12-16 07:32:54 所属栏目:百科 来源:网络整理
导读:我遇到了以下形式的枚举类变量实例化,它在VS2012下编译时没有任何警告或错误: UINT32 id;enum class X {apple,pear,orange};X myX = X(id); 此外,将X(id)作为参数发送到期望编译的X类型参数的函数. 我不确定结果是否总是正确的,或者它只是一个奇怪的编译器
我遇到了以下形式的枚举类变量实例化,它在VS2012下编译时没有任何警告或错误:

UINT32 id;
enum class X {apple,pear,orange};
X myX = X(id);

此外,将X(id)作为参数发送到期望编译的X类型参数的函数.
我不确定结果是否总是正确的,或者它只是一个奇怪的编译器行为.

但是,尝试做X myX(id);而不是上面导致编译错误:

error C2440: ‘initializing’ : cannot convert from ‘UINT32’ to ‘X’.
Conversion to enumeration type requires an explicit cast (static_cast,C-style cast or function-style cast).

阅读C 11标准并没有帮助我理解.
所以我有两个关于这个问题的问题:

>是否可以使用整数类型作为参数构造枚举类对象?
>如果1为真,为什么X myX(id)不起作用?

解决方法

您没有使用该语法构造枚举.相反,您使用另一种显式强制转换语法从UINT32转换为枚举类X.例如,可以将double显式地转换为int,如下所示:

double p = 0.0;
int f = int(p)

有关可在c中使用的所有各种强制转换语法,请参阅this stack overflow post.

您的代码可以使用更常见的强制转换语法编写,如下所示:

UINT32 id;
enum class X {apple,orange};
X myX = (X)id;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读