我刚读了一些与下一个类似的代码:
enum
{
width = 123,
height = 321,
position_x = 234
position_y = 432
};
...
Widget* w = CreateWidget(position_x, position_y, width, height);
在这种情况下是否有任何理由使用枚举而不是宏或const值?
编辑:这样使用枚举是否正确?这种用法在枚举使用中被认为是某种滥用吗?答案 0 :(得分:6)
有很多理由不使用宏。问题中的枚举是作用域,并且不会干扰不同作用域中使用的相同标识符,因此您可以在类中定义成员position_x
,而不会对宏进行宏修改课程定义。
将enum
与常量进行比较,有些人更喜欢枚举,因为它保证不会添加到可执行文件的二进制大小。在常量的情况下,它可以添加(有点,实际上是int
)到二进制的大小。
答案 1 :(得分:3)
不,在这种情况下,没有特别的理由选择enum
超过宏或const int
值。
编者注:以这种方式使用enum
肯定是合法的代码,但乍一看 有点奇怪。
答案 2 :(得分:0)
在这种特殊情况下,在enum
和常数值之间进行选择时似乎没有任何真正的决定因素。然而,两者都比宏更好,一般应该避免使用宏。
更一般地说,enum
和常量之间存在一些区别:
enum
是不同的类型,比整数值更具表现力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
};