1

我刚刚阅读了一些类似于下一个的代码:

enum 
{
    width = 123,
    height = 321,
    position_x = 234
    position_y = 432
};

...

Widget* w = CreateWidget(position_x, position_y, width, height);

在这种情况下是否有任何理由使用 enum 而不是宏或 const 值?

编辑:这样使用枚举是否正确?这种用法是否被认为是枚举使用中的某种滥用?

4

4 回答 4

6

有很多理由不使用宏。问题中的枚举是作用域的,不会干扰在不同作用域中使用的相同标识符,因此您可以例如position_x在类中定义一个成员,而无需宏破坏您的类定义。

enum常量相比,有些人更喜欢枚举,因为它保证不会增加可执行文件的二进制大小。在常量的情况下,它可能会增加(一点,嗯,实际上是一个int)到二进制文件的大小。

于 2013-07-26T13:52:07.770 回答
3

不,在这种情况下没有特殊的理由选择enumover 宏或const int值。

编者注:以这种方式使用当然是合法的代码enum但乍一看有点奇怪。

于 2013-07-26T13:46:13.263 回答
0

enum在这种特殊情况下,在 an和常量值之间进行选择时似乎没有任何真正的决定因素。然而,两者都比宏好,通常应该避免使用宏。

enum更一般地说,an和常量之间有一些不同的方面:

  1. enums 是不同的类型,比整数值更具表现力
  2. 您可以获取常量的地址,但不能获取enum值的地址
于 2013-07-26T13:50:27.580 回答
0

使用它可能enumstatic const int作为类成员更方便。

class A
{
    static const int Foo = 42;
    // may have to define A::Foo somewhere
};

class B
{
    enum { Foo = 42 };
    // done
};
于 2013-07-26T13:58:44.937 回答