1

我见过人们写这样的代码......它有什么意义......

class Test 
{
public:

    struct MethodEnum
    {
        enum Enum
        {
             Method1,
             Method2
        };
    };
};
4

4 回答 4

4

在 C++11 之前的版本中, 的标签enum没有作用域(这意味着标签可以在没有任何enum类型限定的情况下访问!)。因此,为了使它们具有范围,程序员编写了这些代码。但在 C++11 中,不需要它,因为您可以使用enum class.

因此,在 C++11 中,您的代码将如下所示:

class Test 
{
public:
    enum class MethodEnum
    {
             Method1,
             Method2
    };
};
于 2013-11-07T19:08:21.693 回答
1

如果在同一范围内定义了多个枚举类型,并且其中两个枚举类型具有相同名称的枚举,则会发生冲突。这种技术将名称放入单独的范围内,可能通过将名称放入单独的范围内来避免这种冲突。这样,在Test您的成员函数中,将枚举数称为MethodEnum::Method1等。

在 C++11 中,您可以使用enum class.

于 2013-11-07T19:09:35.180 回答
1

有时,您不希望枚举器污染周围的范围;例如

enum Colour {
    Red,
    Yellow,
    Orange
};

enum Fruit {
    Apple,
    Physalis,
    Orange    // ERROR! already defined
};

您的示例是将它们包含在范围内的老式方法;这些天来,我们对枚举 ( enum class) 进行了限定,以便更方便地执行此操作。

于 2013-11-07T19:10:41.377 回答
0

它设置 MethodEnum 和枚举之间的逻辑(或语义)链接。所以例如你可以写

switch ( SomeExpression )
{
   case Test::MethodEnum::Method1
      // do some method1
      break;

   case Test::MethodEnum::Method2
      / do some method2
      break;

   default:
      std::cout << "There is no such a method" << std::endl;
      break;
}
于 2013-11-07T19:14:17.627 回答