C ++ 17:仍使用枚举作为常量吗?

时间:2019-01-31 17:11:17

标签: c++ enums c++17

我习惯于将enum用作常量,它们写起来很快,可以放在.h文件中,并且工作正常。

enum {BOX_LEFT=10, BOX_TOP=50, BOX_WIDTH=100, BOX_HEIGHT=50};
enum {REASONS_I_LIKE_ENUM_AS_CONSTANTS = 3};

这不再是个好主意吗?

我看到良好reasons偏爱枚举类(常规枚举隐式转换为INT;常规枚举其枚举导出到周围的范围),但这些都是原因喜欢旧枚举在这种情况下

我在一个线程中看到static constexpr int vs old-fashioned enum旧风格的枚举更好,因为你必须声明它的类之外还有一个静态constexpr成员。但这显然在C ++ 17中不再适用,并且可能仅适用于类成员。

c ++ 17的首选方式是什么?

2 个答案:

答案 0 :(得分:5)

这是主观的。

但是,这总是 枚举的滥用。您没有枚举任何东西;您只是在窃取enum功能来获取一些与任意整数值无关的东西,这些整数值不具有自己的逻辑“类型”。

这就是为什么enum class在这里也不适合的原因(因为您指出,enum class 加强了 应该将enum的属性在那里,但您实际上不想要)。

由于static constexpr int不再有任何问题,我会使用它(或constexpr inline int或本周的任何情况)。

答案 1 :(得分:1)

您使用enum给出的示例可以重写为:

struct Point
{
    int x;
    int y;
};

struct Box
{
    Point p;

    int width;
    int height;
};

constexpr Box b = { { 1, 2 }, 3, 4 };

int f()
{
    return b.p.x;
}

使用强类型而不是int可能会有所帮助。

对我来说,这更容易理解。我什至可以在其中添加一些功能。