我还没有在C++ 11标准中找到任何说无用的枚举被废弃的措辞,但从实用的角度来看,我想知道它们是否仍然有用。我的团队有很多人已经得到了在转换未范围枚举到作用域枚举的习惯,但它引起了一些头痛:非范围枚举仍然有用吗?
class foo
{
public:
enum MyEnum { One, Two, Three };
};
他们将它转换为:
class foo
{
public:
enum class MyEnum { One, Two, Three };
};
这意味着这些普查员时被使用,而不是foo::One
,它看起来像foo::MyEnum::One
。我一直在问以下最佳实践:
- 如果您转换为范围的枚举,将其移出的类和成全局范围或命名空间范围(以提高可用性,并避免上述后者使用示例)。
- 如果你保持enum unscoped,确保它在namespace/class/function/etc范围内,这样它就不会与其他名称发生冲突。
两点之间的主要区别在于#1我们不把它们放在类中,否则会增加一些冗长的间接性。
所有这些看起来都像是过于复杂化,并且似乎将枚举已经存在于类中作为unscoped枚举要简单得多。决定两者之间的一般最佳实践方法是什么?
切换到'enum class'的好处是您可以阅读关于为何添加它的所有内容;切换到'enum class'的缺点就是你上面写的所有东西。但是,这并不能告诉我们从头开始编写代码时要做什么。 – 2014-12-05 16:40:24
第二次使用有什么问题? – Daniel 2014-12-05 16:40:48
@Daniel冗长。这就像使用2个嵌套命名空间来处理对象,只有1个就足够了。 – 2014-12-05 16:41:27