【发布时间】:2018-08-04 18:43:25
【问题描述】:
假设我们有
enum class Month {jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec};
每个值都是一个整数,从 0 到 11。然后我希望 Month 类型的变量只保存这些枚举值。所以这是创建变量的唯一可行方法:
Month m = Month::may;
但这里有一些语言允许的其他方式:
Month m1 = Month(12345);
Month m2 = static_cast<Month>(12345);
这有点令人失望。我如何只允许第一种方式?或者人们如何应对 C++ 中糟糕的枚举?
【问题讨论】:
-
显然,写第三种方式需要一些努力,如果你使用演员表,你就是在说“我知道我在做什么”。排除第二种方式会很好。
-
C++ 给了你足够的绳索,可以让你射中自己的脚。
-
@Eljay 混合隐喻,我完全同意。