首页 > 解决方案 > 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};

这不再是一个好主意吗?

我看到了更喜欢枚举类的充分理由(传统枚举隐式转换为 int;传统枚举将其枚举数导出到周围范围),但在这种情况下,这些是更喜欢旧枚举的原因。

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

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

标签: c++enumsc++17

解决方案


这是主观的。

然而,这始终是对枚举的滥用。你没有枚举任何东西;您只是在窃取该enum功能以获取一些与任意整数值无关的值,这些值并不打算具有自己的逻辑“类型”。

这就是为什么enum class在这里也不合适的原因(因为,正如您所指出的,它enum class 强制执行enum应该存在但您实际上并不想要的属性)。

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


推荐阅读