【问题标题】:Which to prefer? An enum class, or a nested unnamed enum type? [duplicate]更喜欢哪个?枚举类,还是嵌套的未命名枚举类型? [复制]
【发布时间】:2021-06-29 10:51:35
【问题描述】:
enum Color1 { red, blue, green }; // ok
// enum Color2 { red, blue, green }; // error, enum conflicts

struct Color3
{
    enum { red, blue, green }; // ok, no conflicts
};

enum class Color4 { red, blue, green }; // ok, no conflicts
  1. Color1Color2 都是弱类型。
  2. Color3Color4 都是强类型。

我的问题是:

1. Color3Color4 有什么区别吗?

2。更喜欢哪个? Color3 还是 Color4?为什么?

【问题讨论】:

  • 对于Color1,外部类并不重要,red 只是一个普通的enum。所以你真的在问enumenum class 之间的区别,是的,它们之间存在区别。两种方式都有效,因此我投票决定以基于意见的方式结束此操作,除非您将其更加专注于真正的技术问题。
  • 关于强类型,尝试std::cout << 42 + Color1::red << '\n';,然后使用Color2::red。相关:stackoverflow.com/questions/18335861/…

标签: c++ c++11 enums difference strong-typing


【解决方案1】:

Color3Color4 都是强类型

没有。试试这个:

int x = Color3::red; // ok
int y = Color4::red; // error: cannot convert from 'Color4' to 'int'

旧版枚举可以隐式转换为整数,但 enum class 是它自己的类型。

喜欢哪个,请参考Why is enum class preferred over plain enum?

【讨论】:

    猜你喜欢
    • 2020-12-16
    • 1970-01-01
    • 1970-01-01
    • 2019-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-16
    • 1970-01-01
    相关资源
    最近更新 更多