我习惯于将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的首选方式是什么?
答案 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
可能会有所帮助。
对我来说,这更容易理解。我什至可以在其中添加一些功能。