前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >c++ - 如何自动将强类型枚举转换为int?

c++ - 如何自动将强类型枚举转换为int?

作者头像
ccf19881030
发布2021-03-20 14:37:22
5.5K0
发布2021-03-20 14:37:22
举报
文章被收录于专栏:ccf19881030的博客ccf19881030的博客

c++ - 如何自动将强类型枚举转换为int?

直接看如下代码:

代码语言:javascript
复制
#include <iostream>

struct a {
  enum LOCAL_A { A1, A2 };
};
enum class b { B1, B2 };

int foo(int input) { return input; }

int main() {
  std::cout << foo(a::A1) << std::endl;
  std::cout << foo(static_cast<int>(b::B2)) << std::endl;
   
   return 0;
}

a::LOCAL_A是强类型枚举试图实现的功能,但是有一个小的区别:普通枚举可以转换为整数类型,而强类型枚举不能在没有强制转换的情况下实现。

因此,有没有办法将强类型的枚举值转换为整数类型而无需强制转换?如果是,怎么办?

最佳答案

强类型枚举,旨在解决多个问题,而不仅仅是您在问题中提到的范围界定问题:

提供类型安全性,从而消除了通过整数提升而隐式转换为整数的情况。 指定基础类型。 提供强大的作用域。

因此,不可能将强类型的枚举隐式转换为整数,甚至是其基础类型-这就是这个想法。因此,您必须使用static_cast明确显示转换。

如果唯一的问题是作用域确定,并且您确实希望隐式提升为整数,那么最好在声明它的结构范围内使用不强类型的枚举。

参考资料

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-03-06 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • c++ - 如何自动将强类型枚举转换为int?
    • 最佳答案
    • 参考资料
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档