这效率低吗?

时间:2011-06-10 18:27:12

标签: c++ enums int

Extending这个问题,我想使用我认为的val,因为它们是“应该”的,

#include <stdio.h>
enum E{ A, B, C } ;

#define inc(enVal) (*((int*)&enVal))++

int main()
{
  E t = A ;
  inc( t ) ;
  printf( "t %d\n", t ) ;
}

现在呃,t是枚举类型E的变量,我有一个宏inc,可以将t的值增加1,

这个宏(并且可能是其他用于标记检查的宏)的效率要比仅使用int t效率低得多吗?

3 个答案:

答案 0 :(得分:11)

不,效率不高。然而,它将是令人难以置信的,可怕的,错误的。请永远不要。

哦,尤​​其是因为枚举的支持类型是未定义的,并且它们实际上可能会在某些编译器上编译为小于int的大小。

答案 1 :(得分:5)

来吧,可以为枚举重载:

E& operator ++ (E& x)
{
    x = E((int)x + 1);
    return x;
}

请参阅in action

答案 2 :(得分:0)

我很确定这违反了标准中的严格别名规则,而且不仅仅是它根本不适用于C。你真的想做什么?它实际上是否使SENSE增加值?

假设您正在尝试实现状态机,更好的是只有一个vector /数组查找表并使用它来移动到新状态。

如果您希望能够假设枚举值是连续的,您确定不应该只使用int吗?