使用C ++枚举而不是const值

时间:2013-07-26 13:44:29

标签: c++ enums constants

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

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

...

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

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

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

4 个答案:

答案 0 :(得分:6)

有很多理由不使用宏。问题中的枚举是作用域,并且不会干扰不同作用域中使用的相同标识符,因此您可以在类中定义成员position_x,而不会对宏进行宏修改课程定义。

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

答案 1 :(得分:3)

不,在这种情况下,没有特别的理由选择enum超过宏或const int值。

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

答案 2 :(得分:0)

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

更一般地说,enum和常量之间存在一些区别:

  1. enum是不同的类型,比整数值更具表现力
  2. 您可以获取常量的地址,但不能取enum值的地址

答案 3 :(得分:0)

使用enum而不是static const int作为班级成员可能更方便。

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

class B
{
    enum { Foo = 42 };
    // done
};